观察者模式简单实现

来源:互联网 发布:软件开发安全管理规范 编辑:程序博客网 时间:2024/05/20 11:36

简单来说观察者模式是指被观察对象在状态变化时,主动通知观察者

下面是一个简单的实现

public class Subject {    private List<Observer> observers = new ArrayList<>();    private int state;    public void setState(int state) {        if (this.state == state) {            return;        }        this.state = state;        notifyAllObservers();    }    public int getState() {        return state;    }    public void attach(Observer observer) {        observers.add(observer);    }    private void notifyAllObservers() {        observers.stream().forEach(o -> o.update());    }}

Subject,即被关察的对象。持有一个所有观察者的list,和notifyAllObserver的方法用于在状态改变时通知。

public abstract class Observer {    protected Subject subject;    public Observer(Subject subject) {        this.subject = subject;    }    public abstract void update();}

观察者父类。有一个update方法,用于向Subject提供通知入口。在构造函数中向Subject中绑定。

public class BinaryObserver extends Observer {    public BinaryObserver(Subject subject) {        super(subject);        subject.attach(this);    }    @Override    public void update() {        System.out.println("BinaryObserver " + Integer.toBinaryString(subject.getState()));    }}

Observer的一个实现类。

测试

public class ObserverTest {    public static void main(String[] args) {        Subject subject = new Subject();        BinaryObserver observer = new BinaryObserver(subject);        subject.setState(3);        subject.setState(4);        subject.setState(4);    }}

结果

BinaryObserver 11BinaryObserver 100
原创粉丝点击