Java setter 自动发送事件
Java send event automatically on setter
我正在使用 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 语言的候选语言,通过 Observable
和 Observer
类 提供了一些基本支持。缺点是您必须在相应的 类 中 扩展 这些。不过,这使您免于添加 observer/obervable 代码的开销。从广义上讲,您只需在模型对象的 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
,因此您会非常紧密地耦合并限制进一步的对象扩展。
我正在使用 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 语言的候选语言,通过 Observable
和 Observer
类 提供了一些基本支持。缺点是您必须在相应的 类 中 扩展 这些。不过,这使您免于添加 observer/obervable 代码的开销。从广义上讲,您只需在模型对象的 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
,因此您会非常紧密地耦合并限制进一步的对象扩展。