java – 在fileds的setter中更新观察者是否被视为不好的做法?
作者:互联网
假设我有一个对象Subject,它包含一个观察者列表和一个int字段:
package example.template.pattern.observer;
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public void attach(Observer observer) {
observers.add(observer);
}
public void notifyAllObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
我希望在州立场的每次’设定’操作后通知他们所有人.我知道执行此类操作的最常见代码是这样的:
Subject subject = new Subject();
subject.add(newObserver);
subject.setState(newState);
subject.notifyAllObservers();
但是因为每次我为状态设置一个新值时我都想要更新,所以我更改了一些代码.
将notifyAllObservers()访问修饰符更改为private:
private void notifyAllObservers() { ... code }
并为该州的二传手增加了一条额外的新线:
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
以上代码是否被视为不良做法?
解决方法:
为什么这不行?
在我看来,这实际上被认为是一种很好的做法.很可能在一个月左右之后忘记拨打notifyAllObservers.或者甚至更糟糕的是,其他人可能会使用您的代码并且不知道他们应该在设置状态后调用notifyAllObservers.如果发生这种情况,您的代码可能无法正常工作.这就是为什么你应该在setState方法中放置notifyAllObservera.这样,您和其他人就不用担心了.
标签:java,design-patterns,observer-pattern 来源: https://codeday.me/bug/20190824/1703041.html