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