观察者模式:
定义了对象的一对多依赖,这样一来,当一个对象改变状态的时候,它的所有依赖者都会收到通知并作出相应的动作;
当subject状态更新的时候,如果想要通知观察他的对象,那么subject本身势必要持有观察他的对象的集合,这样才会自身有状态更新的时候,根据集合去通知观察者;观察者众多,通知的时候肯定是通过统一的接口来调用观察者的方法,这个统一的接口可以看做observer;subject本身拥有观察者的集合,那么自身会有一些管理观察者的动作,这些动作可以集合在subject接口;
从observer角度来说,要实施观察动作,那么就需要持有一个subject对象;
示例代码:
1 | package com.vayne.design; |
观察者:
1 | package com.vayne.design; |
各自的一个实现:
1 | package com.vayne.design; |
1 | package com.vayne.design; |
几个原则:
- 封装变化;
- 多用组合,少用继承;
- 针对接口编程;不针对具体实现编程;
参考《headfirst设计模式》