【JAVA设计模式】19.观察者模式

观察者模式分为观察者和通知者,当观察者注册到通知者时,通知者可以将信息通知到每一个观察者“

UML图:

【JAVA设计模式】19.观察者模式

观察者接口及其实现类:

interface Observer {
    void update();
}

class ConcreteObserver implements Observer {
    private String observerState;

    public ConcreteObserver(String observerState) {
        this.observerState = observerState;
    }

    @Override
    public void update() {
        System.out.println(observerState + " updated to 777");
        observerState = "777";
    }
}

通知者接口及其实现类:

interface Subject {
    void attach(Observer o);

    void detach(Observer o);

    void notify1();
}

class ConcreteSubject implements Subject {
    private List<Observer> list = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        list.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        list.remove(observer);
    }

    @Override
    public void notify1() {
        for (Observer observer : list) {
            observer.update();
        }
    }
}

在客户端中调用时,将需要被观察的观察者对象注册至通知者中,调用通知者的通知方法即可通知所有的观察者:

Observer observer1 = new ConcreteObserver("observer 1");
Observer observer2 = new ConcreteObserver("observer 2");
Subject subject = new ConcreteSubject();
subject.attach(observer1);
subject.attach(observer2);
subject.notify1();

JAVA代码:https://github.com/zhuaizhuaixi/design-pattern/tree/master/src/designpattern/behavioral/memento