代码之家  ›  专栏  ›  技术社区  ›  nafets

解决循环依赖关系Java[已关闭]

  •  0
  • nafets  · 技术社区  · 9 年前

    下面我发布了一个具有循环依赖关系的简单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() {
        ...
      }
    }
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   weston    9 年前

    声明接口:

    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);
       }
    }