编程语言
首页 > 编程语言> > java – 在fileds的setter中更新观察者是否被视为不好的做法?

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