gpt4 book ai didi

Java 在 setter 上自动发送事件

转载 作者:行者123 更新时间:2023-11-30 08:05:00 25 4
gpt4 key购买 nike

我正在使用 Eclipse RCP 构建一个 Java 应用程序。当我的模型类被修改时(感谢我的 setter 方法),我想发送与每个不同的 setter 相对应的事件(IEventBroker),我的不同 UI 元素可以捕获这些事件。我考虑过这种模式:

Model {
setValueForA() {...}
setValueForB() {...}
setValueForC() {...}
}

ServiceLayer {
setValueForA() {
model.setValueForA();
sendEventAUpdated();
}
setValueForB() {
model.setValueForB();
sendEventBUpdated();
}
setValueForC() {
model.setValueForC();
sendEventCUpdated();
}
}

有没有一种方法可以帮助我实现更少的代码,并避免这种复制代码?我使用的是 1.8 JDK

最佳答案

这听起来像是 Observer pattern. 的候选者。 Java 语言通过 ObservableObserver 类提供一些基本支持。缺点是您必须在相应的类(class)中扩展这些。不过,这使您免于添加观察者/可观察代码的开销。一般来说,您只需在模型对象的 setter 方法中添加通知代码即可。定义观察者,然后通过应用程序(服务)代码将它们连接在一起。每当set发生时,如果它有通知编码,它将通知与模型对象关联的所有观察者。

以下是基于相关代码的粗略示例:

Model extends Observable {  //various observers can be notified when property changes.
setValueForA(Object value) {...
setChanged();
notifyObservers(value);
}
//Example setter above. Similar code needed in all required properties.
}

现在创建观察者

public class SomePropertyObserver implements Observer
{
private ObservableValue ov = null;
public SomePropertyObserver(ObservableValue ov)
{
this.ov = ov;
}

//This method is called whenever the observed object is changed.
public void update(Observable obs, Object obj)
{
//obj is the value sent from notifyObservers called from observable
}
}

将它们在您的应用程序代码中结合在一起:

Model model = new Model();
SomePropertyObserver observer = new SomePropertyObserver(model);
model.addObserver(observer); // now observer will get notification whenever a property changes in model.

有一些缺点,因为您必须扩展 Observable,因此您的耦合非常紧密,并限制进一步的对象扩展。

关于Java 在 setter 上自动发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com