I asked here https://stackoverflow.com/questions/65198966/observer-pattern-observe-attributes-independently当我需要通知时我应该如何处理这种情况观察员仅当特定属性object变化。
我收到了非常好的回复,参考GoF https://en.wikipedia.org/wiki/Design_Patterns其中写着:
块引用
明确指定感兴趣的修改。您可以通过扩展主题的注册接口以允许仅针对感兴趣的特定事件注册观察者来提高更新效率。当此类事件发生时,主体仅通知那些对该事件感兴趣的观察者。支持这一点的一种方法是使用主题对象的方面概念。为了记录对特定事件的兴趣,观察者使用以下方法将其附加到他们的主题上:
void Subject::Attach(Observer*, Aspects interest);
块引用
其中interest 指定感兴趣的事件。在通知时,主体将更改的方面作为更新操作的参数提供给其观察者。例如:
void Observer::Update(Subject*, Aspect& interest);
这是有道理的,我想问一下如何在Java中正确实现这一点。我的想法很少,但我不确定是否有更好的东西。
让我们想象一下我有subject class WeatherStation[temperature, humidity, windSpeed ...]
我有observer class LimitedDisplay[show (shows only temperature and humidity)
由于某种原因,我需要显示器应该能够区分何时仅改变温度和何时仅改变湿度。
我想我可以创建一些枚举WeatherStationInterest[TEMPERATURE, HUMIDITY WIND_SPEED...]
然后有这样的主题界面:
public interface WeatherStationSubject{
registerObserver(WeatherStationObserver observer, WeatherStationInterest... interests);
.
.
.
}
有人可以确认我这是正确的方法吗?或者建议我更好的解决方案。