下面的代码可以用于打破Java中的循环依赖关系。
这是什么毕达通的方式?
interface A {
int A1();
}
class X implements A {
B b;
public int X1() {
b = B(this);
b.doSomething();
}
public int A1() { ... }
}
class B {
A a;
public B(A a) {
this.a = a;
}
public doSomething() {
//...
this.a.A1();
//...
}
}发布于 2013-08-28 23:25:35
要做到这一点,最简单、也通常也是最重要的一种方法是依赖鸭子类型,因此在静态代码中没有明确的依赖项,也没有循环性。
在Java中需要接口的原因是因为Java强制B类向其a成员提供静态类型,而a参数则类似地为其构造函数提供静态类型。在Python中不需要这样做,因为变量没有类型(当然有值,但是任何变量都可以保存任何类型的值)。如果要显式强制检查,可以使用abc)作为接口…但它真的不会给你买任何东西。最好还是让鸭子当鸭子吧:
class X(object):
def x1(self):
self.b = B(self)
self.b.do_something()
def a1(self):
# ...
class B(object):
def __init__(self, a):
self.a = a
def do_something(self):
self.a.a1()当然,仍然存在动态循环,但这不是问题。(嗯,循环引用可能是一个问题,但通常不是,这不是您所担心的问题,也与…没有什么不同)
https://stackoverflow.com/questions/18499858
复制相似问题