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();}});

输出:

劫匪跑了......


原创粉丝点击