观察者模式
来源:互联网 发布:收光28网络会丢包吗 编辑:程序博客网 时间:2024/06/06 08:46
几个月之前大致的看了一下《大话设计模式》这本书,对其中的观察者模式有过了解,最近的项目中正好使用过,故此就当复习一遍。所谓温故而知新!
首先,什么是观察者模式?
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在发生变化时会通知所有观察者对象,使他们自动更新当一个对象变化时, 其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
说了这么多还不如打个比方来加深理解。
例如:在一次珠宝展会中,展出的珠宝就是一个被监听的主体对象。有一批安保负责管理珠宝的安全问题,有一批盗贼想抢劫这个珠宝,于是,安保和盗贼就是其中的观察者。
于是将安保和盗贼抽象出来为观察者,珠宝为被监听的主题对象。
通过类图可以看出被观察者主要有三个方法用于注册观察者,卸载观察者,通知操作。
观察者主要有处理通知的操作。
上代码:
/** * 被观察者,被监听的资源 * @author root * */public interface Subject { /** * 注册观察者对象 * @param observer */ public void register(Observer observer); /** * 解除关系 * @param observer */ public void detach(Observer observer); /** * 通知观察者 */ public void notifyAllObserver();}
/** * 观察者模式: * * 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象, * 这个主题对象在发生变化时会通知所有观察者对象,使他们自动更新当一个对象变化时, * 其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系 * * @author root * *///抽象观察者,主要处理被观察者状态发生改变时所对应的操作public interface Observer {public void doHandler();}/** * 观察者一:警察负责珠宝安全 * @author root * */public class PoliceObserver implements Observer { @Override public void doHandler() { System.out.println("警察在旁边观察珠宝......"); }
/** * 观察者二:小偷,想偷珠宝 * @author root * */public class ThiefObserver implements Observer { @Override public void doHandler() { System.out.println("小偷打算偷珠宝。。。。"); }}
/** * 被观察的资源。 * @author root * */public class DiamondSubject implements Subject { //一对多的依赖关系,让多个观察者对象同时监听某一个主体对象 private List<Observer> observers; public DiamondSubject(){ if(observers == null){ observers = new ArrayList<Observer>(); } } @Override public void register(Observer observer) { observers.add(observer); } @Override public void detach(Observer observer) { observers.remove(observer); } @Override public void notifyAllObserver() { //通知观察者作出对应操作 for(Observer o : observers){ o.doHandler(); } }}
public class TestObserver { public static void main(String[] args) { Subject s = new DiamondSubject(); Observer o1 = new PoliceObserver(); Observer o2 = new ThiefObserver(); s.register(o1); s.register(o2); s.notifyAllObserver(); }}
小结:
观察者模式主要在于在被观察者一方维护了了多个观察者对象,当被观察者状态变化时会通过特定方法(在上例中notifyAllObserver方法)通知观察者做出对应操作。
阅读全文
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 实验 排序的有关操作
- hbase 1.2.6 集群模式
- 正则表达式详解(贪婪与懒惰、前瞻与后顾、后向引用等)
- 关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题
- 【OpenCV3图像处理】图像分割
- 观察者模式
- XListView的使用以及本地缓存
- 全面解析schedule、scheduleAtFixedRate和scheduleWithFixedDelay
- C++:获取当前系统时间并返回
- asp.net iis网站播放不了视频和不能访问json文件
- Centos下tomcat配置
- 安卓3.0 的kotlin是用listview
- POJ 1456 Supermarket 笔记
- 去除括号文字2