观察者模式也叫发布/订阅模式,它定义了一种一对多的依赖关系,可以让多个观察者对象同时监听一个主题对象,当主题对象的状态发生变化时,会通知所有观察者对象,使它们能够更新自己。
在主题对象内部可以保存主题对象当前所处的状态,当调用观察者对象的更新方法时,可以将主题对象的状态传递给观察者对象。
Subject
抽象主题角色。因为一个主题对象可以同时被多个观察者对象监听,所以在主题对象内部需要用一个集合来保存所有观察者对象,同时抽象主题角色还要声明增加、移除观察者对象的方法
ConcreteSubject
继承或实现抽象主题角色。在状态发生变化时,会通知所有观察者对象
Observer
抽象观察者角色。需要声明更新方法。当具体主题对象内部的状态发生变化时,会调用所有观察者对象的更新方法
ConcreteObserver
实现抽象观察者角色中声明的更新方法