如何通知类 层次结构中更高的更改?
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 是接收发布者消息的订阅者。
您认为哪一个是更好的解决方案?有没有更好的方法我还没有提到?
解决方案一和三更适合 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);
}
}
假设我有两个 classes,基于组成:
Class A 持有对 Class B 的引用。
现在 B 不应该知道他的 A 的任何信息,但需要通知 A 对某些事件进行更新。需要更新的是A持有的一个对象。我想知道如何以干净的方式解决这个问题。
解决方法一: A 观察 B 上是否发生事件,并对该对象进行更新。
方案二: A 在 B 的构造函数中注入对象。后者处理更新。
方案三: 适配器 class 其中 B 是注册发布者,A 是接收发布者消息的订阅者。
您认为哪一个是更好的解决方案?有没有更好的方法我还没有提到?
解决方案一和三更适合 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);
}
}