首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 雙向關聯對象互調設計:延遲初始化模式實現

     編輯:程式設計綜合問答

問題

A 持有 B,B 持有 A,調用 A.getNum1() 時自動觸發 B.setNum1(),省去外部顯式調用。

解決方案:雙向綁定 + 延遲賦值


public class A {
    private static A instance = new A();
    private B b;
    private int num1 = 0, num2 = 0;

    private A() {}
    public static A getInstance() { return instance; }

    public void setB(B b) { this.b = b; }

    public int getNum1() {
        if (b != null) b.setNum1(); // 延遲觸發
        return num1;
    }
    public void setNum1(int num1) { this.num1 = num1; }
    // num2 同理
}

public class B {
    private A a = A.getInstance();
    { a.setB(this); } // 實例初始化塊,確保雙向綁定

    public void setNum1() { a.setNum1(2); }
    public void setNum2() { a.setNum2(3); }
    public A getA() { return a; }
    public void setA(A a) { this.a = a; a.setB(this); }
}

public class C {
    public static void main(String[] args) {
        B b = new B();
        A a = b.getA();
        System.out.println(a.getNum1()); // 2
        System.out.println(a.getNum2()); // 3
    }
}

設計評價

雖能實現需求,但強耦合、隱式副作用、難測試,屬反模式。建議改用觀察者模式或事件總線解耦,或在調用處顯式協調。

用戶頭像

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved