如何通知层次结构中更高级别的更改?

时间:2018-01-21 19:05:14

标签: design-patterns circular-dependency

假设我有两个基于作文的课程:

A类,其中包含对B类的引用。

现在B不应该对他的A有任何了解,但需要通知A对某些事件进行更新。需要更新的是A持有的对象。我想知道如何以干净的方式解决这个问题。

解决方案一: A观察B上是否发生事件并对对象进行更新。

解决方案二: A在B的构造函数中注入对象。后者处理更新。

解决方案三: 适配器类,其中B是注册发布者,A是接收发布者消息的订阅者。

您认为哪个是更好的解决方案?还有一种我还没有提到的更好的方法吗?

2 个答案:

答案 0 :(得分:1)

解决方案一和三更适合B可以向多个客户发布事件的上下文 在你的情况下,情况似乎并非如此 使用仅在作曲家和作曲家之间设计的交流的事件工具似乎不相关。

  

解决方案二:A在B的构造函数中注入对象。后者   处理更新。

这似乎是最好的方式 实际上,您可以在A构造函数中传递B B构造函数接受提供"回调"的特定接口。与A沟通的方法。

例如:

public interface CallBackA {
   void updateFoo(int value);
}

public class A implements CallBackA{

    public A() {
        new B(this);
    }

    @Override
    public void updateFoo((int value) { 
         ...
    }
}

public class B {

    private CallBackA callBackA;

    public B(CallBackA callBackA) {
        this.callBackA = callBackA;
    }

    public void foo() {
        int updatedValue = 123;
        callBackA.updateFoo(updatedValue);
    }

}

答案 1 :(得分:0)

参见观察者设计模式:https://en.wikipedia.org/wiki/Observer_pattern