Design patterns 这是循环依赖吗 class-foo{ b栏; } 分类栏{ clazz类=foo.Class; }
上面的代码段是否显示循环依赖关系。类foo有一个bar类对象的引用。类栏引用了foo类本身。虽然具体细节可能会略有不同,这取决于您使用的语言,但用更纯粹的面向对象术语来说,不是 看看类似于Ruby的Smalltalk语言,了解情况会很有帮助: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_
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实例
具有-abar实例
,而bar实例
具有-afoo类
。在纯OO中,foo类
是foo实例
的工厂,类方法不能引用实例方法,但反之亦然,因此foo实例
可以依赖于foo类
,而不是相反
因此,在这个精心设计的示例中,foo实例
是依赖关系树的头部,而foo类
是尾部。如果不是在clazz实例变量中引用Foo类,而是引用了一个Foo实例
,则会有一个循环依赖关系图