java设计模式———观察者模式
来源:互联网 发布:win10 ubuntu 虚拟机 编辑:程序博客网 时间:2024/05/16 09:41
观察者模式
观察者模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时, 所有依赖于它的对象(观察者)都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。
1. Observable和Observer对象是一对多的关系,也就是说一旦Observable对象状态变化,它就要负责通知所有和它有关系的Observer对象,然后做相应的改变.
1. Observable对象不会主动去通知各个具体的Observer对象其状态发生了变化,而是提供一个注册接口供Observer对象使用,任何一个Observer对象如果想要被通知,则可以使用这个接口来注册.
3. 在Observable中有一个集合和一个状态控制开关,所有注册了通知的Observer对象会被保存在这个集合中.这个控制开关就是用来控制Observable是否发生了变化,一旦发生了变化,就通知所有的Observer对象更新状态.
好了,废话不多说,直接上代码,首先抽象一个场景:一伙劫匪正在抢银行,劫匪老大安排2个小弟分别在前后门望风,有警察来了通知里面的人撤退。
观察者A:
public class ObserverA implements Observer {@Overridepublic void update(Observable observable, Object data) {System.out.println("ObserverA 说警察来了,快跑啊...");}}
观察者B:
public class ObserverB implements Observer {@Overridepublic void update(Observable observable, Object data) {System.out.println("ObserverB 说警察来了,快跑啊...");}}
被观察者:
public class PoliceMan extends Observable {/** * 警察巡逻 */public void patrol(){if(true){super.setChanged();}notifyObservers("我正在巡逻...");}}
方法的实现,这里时基于android的,java直接写一个测试类在mian方法里面实现:
mbtnObserver.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//初始化被观察对象PoliceMan policeMan = new PoliceMan();//初始化2个观察者ObserverA observerA = new ObserverA();ObserverB observerB = new ObserverB();//把2个观察者添加到被观察者列表中policeMan.addObserver(observerA);policeMan.addObserver(observerB);//被观察这开始工作policeMan.patrol();}});
输出:
劫匪跑了......
- Java设计模式——观察者模式
- java设计模式——观察者模式
- JAVA设计模式——观察者模式
- Java 设计模式——观察者模式
- JAVA设计模式 —— 观察者模式
- Java设计模式——观察者模式
- Java设计模式——观察者模式
- java设计模式——观察者模式
- java设计模式——观察者模式
- Java设计模式——观察者模式
- Java设计模式——观察者模式
- Java设计模式—— 观察者模式
- Java设计模式——观察者模式
- Java设计模式——观察者模式
- Java设计模式——观察者模式
- Java设计模式——观察者模式
- java设计模式——观察者模式
- java设计模式 ——观察者模式
- IIS十大使用原则让你做好网络管理员
- Android NDK Overview
- 休假归来
- 题目1384:二维数组中的查找-九度
- android多媒体本地播放流程video playback--base on jellybean (三)
- java设计模式———观察者模式
- 面试整理
- 第一次写周报
- Building the Android JDBC Driver
- URAL 1104
- C++ allocator
- java构造方法学习及其实例
- HDU 3415 Max Sum of Max-K-sub-sequence
- 静态库中使用MFC编译出现错误,共享DLL使用则正常的解决方案