观察者模式 :
定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使他们能够自动更新自己。
根据概念,我们知道这个模式由 多个观察者,一个被观察对象组成。观察者需要将到被观察对象那里去注册自己,或者说被观察对象保存着多个观察者得引用。一旦被观察对象的状态发生了变化,那么它会通知在它这里注册了的所有观察者,而这些观察者一收到消息就会自动进行相应的操作。
观察者模式核心之处在于观察者和被观察对象都不知道对方的存在,也就是没有使用硬编码的方式将两者组合在一起。
现在使用程序来实现观察者模式加深理解:
1. 建立Observer 接口,该接口有个 Updatestate() 函数声明。 当被观察对象状态改变时,这个UpdateState()函数就派上用场 了
2. 建立被观察对象的抽象类,这个抽象类有 注册,撤销注册,以及发出状态改变消息的方法。
3. 建立具体被观察对象类 Server
4. 建立具体观察者对象: ServerObserver 类。在这里,ServerObserver 类主要代表 经理 和普通组员。他们要随时关注公司服务器的状态,一旦服务器有问题,他们就要采取相应的行动来保证服务器正常运作。
从代码中可以看到,观察者也不知道自己需要关注哪个具体的被观察对象。降低了代码的耦合性。
5. 建立测试代码, Server 注册了两个观察者 manager 和 staff 。 一旦Server 的状态发生,马上调用Notify() 方法,通知这两个观察者。两个观察者一接到通知,就有不同的动作。
结果输出:
observer: manager server state:服务器崩溃 action is :向上级汇报,并赶回公司
observer: staff server state:服务器崩溃 action is :赶回公司修理
观察者模式是观察者随着被观察对象变化而变化的?
通过代码实现,知道了观察者有一个 updateState 方法,用来实现当被观察对象状态改变时动作响应。
被观察者对象用List 保存了一些观察者。
当被观察者对象状态改变时,它就是调用Notify 方法。Notify 方法会取出List 中所有的Observer 对象,并执行每一个 Obserer 的updateState 方法。也就是说观察者得upateState 方法不是观察者自己调用的,而是被 被观察对象调用的。