解决循环依赖关系 Java
Resolving Circular Dependencies Java
下面我发布了一个带有循环依赖的简单 Java 代码示例。
MyObject
有两个成员(myObject1
和 myObject2
),它们引用了对象本身。
有没有办法在解决依赖关系的同时保持功能?
public abstract class AbstractMyObject {
public void myMethod(int param) {
System.out.println(param);
}
}
public class MyObject extends AbstractMyObject {
private MyObject1 myObject1;
private MyObject2 myObject2;
public MyObject() {
myObject1 = new MyObject1( this );
myObject2 = new MyObject2( this );
...
}
private void aMethod() {
myObject1.doSomething();
myObject2.doSomething();
}
}
public class MyObjectWrapper {
private MyObject myObject;
public MyObjectWrapper (MyObject myObject) {
this.myObject = myObject;
}
public void myMethod(int param) {
this.myObject.myMethod(param);
}
}
public class MyObject1 extends MyObjectWrapper {
public MyObject1(MyObject myObject) {
super(myObject);
}
private void aMethod() {
myMethod(1);
}
public void doSomething() {
...
}
}
public class MyObject2 extends MyObjectWrapper {
public MyObject2(MyObject myObject) {
super(myObject);
}
private void aMethod() {
myMethod(2);
}
public void doSomething() {
...
}
}
声明接口:
public interface class MyInterface {
void myMethod(int param);
}
实现接口:
public class MyObject implements MyInterface {
在包装器和后代中使用接口而不是具体的 class MyObject
:
public class MyObjectWrapper {
private MyInterface myObject;
public MyObjectWrapper (MyInterface myObject) {
this.myObject = myObject;
}
public myMethod(int param) {
this.myObject.myMethod(param);
}
}
下面我发布了一个带有循环依赖的简单 Java 代码示例。
MyObject
有两个成员(myObject1
和 myObject2
),它们引用了对象本身。
有没有办法在解决依赖关系的同时保持功能?
public abstract class AbstractMyObject {
public void myMethod(int param) {
System.out.println(param);
}
}
public class MyObject extends AbstractMyObject {
private MyObject1 myObject1;
private MyObject2 myObject2;
public MyObject() {
myObject1 = new MyObject1( this );
myObject2 = new MyObject2( this );
...
}
private void aMethod() {
myObject1.doSomething();
myObject2.doSomething();
}
}
public class MyObjectWrapper {
private MyObject myObject;
public MyObjectWrapper (MyObject myObject) {
this.myObject = myObject;
}
public void myMethod(int param) {
this.myObject.myMethod(param);
}
}
public class MyObject1 extends MyObjectWrapper {
public MyObject1(MyObject myObject) {
super(myObject);
}
private void aMethod() {
myMethod(1);
}
public void doSomething() {
...
}
}
public class MyObject2 extends MyObjectWrapper {
public MyObject2(MyObject myObject) {
super(myObject);
}
private void aMethod() {
myMethod(2);
}
public void doSomething() {
...
}
}
声明接口:
public interface class MyInterface {
void myMethod(int param);
}
实现接口:
public class MyObject implements MyInterface {
在包装器和后代中使用接口而不是具体的 class MyObject
:
public class MyObjectWrapper {
private MyInterface myObject;
public MyObjectWrapper (MyInterface myObject) {
this.myObject = myObject;
}
public myMethod(int param) {
this.myObject.myMethod(param);
}
}