【问题标题】:Resolving Circular Dependencies Java [closed]解决循环依赖Java [关闭]
【发布时间】:2016-02-01 15:43:24
【问题描述】:

下面我发布了一个带有循环依赖的简单 Java 代码示例。

MyObject 有两个成员(myObject1myObject2)引用对象本身。

有没有办法解决依赖关系但保留功能?

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() {
    ...
  }
}

【问题讨论】:

  • 这真的是 Java 吗?检查你的构造函数!
  • 你想保留什么功能?

标签: java dependencies circular-dependency


【解决方案1】:

声明接口:

public interface class MyInterface {    
    void myMethod(int param);
}

实现接口:

public class MyObject implements MyInterface {

在包装器和后代中使用接口而不是具体类MyObject

public class MyObjectWrapper { 
   private MyInterface myObject;

   public MyObjectWrapper (MyInterface myObject) {
       this.myObject = myObject;
   }

   public myMethod(int param) {
     this.myObject.myMethod(param);
   }
}

【讨论】:

  • 但这只是一种更抽象还是?最简单的解决方案可能是将所有代码放在一个类中,但这会使类变得非常庞大。那么布局代码的最佳方式是什么?
  • 这只是一种阻止 A 类引用 B 类和 B 类引用 A 类的方法。除此之外,我不知道什么最适合你,我看不出你想要实现什么.
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2013-02-04
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多