Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 这是循环依赖吗 class-foo{ b栏; } 分类栏{ clazz类=foo.Class; }_Design Patterns_Object Oriented Analysis_Cyclic Dependency - Fatal编程技术网

Design patterns 这是循环依赖吗 class-foo{ b栏; } 分类栏{ clazz类=foo.Class; }

Design patterns 这是循环依赖吗 class-foo{ b栏; } 分类栏{ clazz类=foo.Class; },design-patterns,object-oriented-analysis,cyclic-dependency,Design Patterns,Object Oriented Analysis,Cyclic Dependency,上面的代码段是否显示循环依赖关系。类foo有一个bar类对象的引用。类栏引用了foo类本身。虽然具体细节可能会略有不同,这取决于您使用的语言,但用更纯粹的面向对象术语来说,不是 看看类似于Ruby的Smalltalk语言,了解情况会很有帮助: class-Foo def初始化() @b=Bar.new() 结束 def_是什么_b()#实例方法可以调用类方法who @b、 谁() 结束 def who() “foo实例” 结束 def self.who()#类方法不能调用实例方法what_is_

上面的代码段是否显示循环依赖关系。类foo有一个bar类对象的引用。类栏引用了foo类本身。

虽然具体细节可能会略有不同,这取决于您使用的语言,但用更纯粹的面向对象术语来说,不是

看看类似于Ruby的Smalltalk语言,了解情况会很有帮助:

class-Foo
def初始化()
@b=Bar.new()
结束
def_是什么_b()#实例方法可以调用类方法who
@b、 谁()
结束
def who()
“foo实例”
结束
def self.who()#类方法不能调用实例方法what_is_b
“富类”
结束
结束
分类栏
def初始化()
@clazz=Foo
结束
定义什么是clazz()
@克拉兹,谁
结束
def who()
“酒吧实例”
结束
def self.who()
“酒吧级别”
结束
结束
f=Foo.new()
f.谁
把f.什么是b()
把“和”
b=Bar.new()
b.谁
把b.什么是clazz()
这将产生:

foo实例
酒吧实例
及
酒吧实例
福类
这表明
foo实例
具有-a
bar实例
,而
bar实例
具有-a
foo类
。在纯OO中,
foo类
foo实例
的工厂,类方法不能引用实例方法,但反之亦然,因此
foo实例
可以依赖于
foo类
,而不是相反

因此,在这个精心设计的示例中,
foo实例
是依赖关系树的头部,而
foo类
是尾部。如果不是在clazz实例变量中引用Foo类,而是引用了一个
Foo实例
,则会有一个循环依赖关系图