Java在setter上自动发送事件

Java在setter上自动发送事件,java,events,design-patterns,eclipse-plugin,eclipse-rcp,Java,Events,Design Patterns,Eclipse Plugin,Eclipse Rcp,我正在用EclipseRCP构建一个Java应用程序。 当我的模型类被修改时(由于我的setter方法),我想发送对应于每个不同setter的事件(IEventBroker),我的differentui元素可以捕捉到这些事件。我想到了这个模式: Model { setValueForA() {...} setValueForB() {...} setValueForC() {...} } ServiceLayer { setValueForA() {

我正在用EclipseRCP构建一个Java应用程序。 当我的模型类被修改时(由于我的setter方法),我想发送对应于每个不同setter的事件(IEventBroker),我的differentui元素可以捕捉到这些事件。我想到了这个模式:

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

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

有没有一个框架、库、注释,。。。无论谁能帮助我实现更少的代码,并避免这种复制代码?我使用的是1.8JDK

这听起来像是Java语言的候选者通过
Observable
observator
类提供了一些基本支持。缺点是您必须在相应的类中扩展这些。这将使您从添加observer/obervable代码的开销中解脱出来。一般来说,您只需在模型对象的
setter
方法中添加notify代码。定义观察者,然后从应用程序(服务)代码中将它们绑定在一起。每当发生
集合
时,如果它已进行了notify code,它将通知与模型对象关联的所有观察者

下面是一个基于相关代码的粗略示例:

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.

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

在我看来,您不希望注释这样做。代码应该简单易懂。它不应该模糊“秘密”功能。不管它值多少钱,它被设计用来协助触发属性更改事件。