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