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

How to notify classes higher in the hierarchy for changes?

假设我有两个 classes,基于组成:

Class A 持有对 Class B 的引用。

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

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

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

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

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

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

解决方案一和三更适合 B 可能向多个客户端发布事件的上下文。
你的情况好像不是这样。
使用仅在作曲者和作曲者之间设计的通信事件设施似乎无关紧要。

Solution two: A injects the object in the constructor of B. The latter handles the update.

这似乎是最好的方法。
事实上,您可以在 B 构造函数中传递 A,其中 B 构造函数接受一个特定接口,该接口提供 "callback" 方法与 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);
    }

}