现在的位置: 首页 > 综合 > 正文

java设计模式———观察者模式

2012年07月25日 ⁄ 综合 ⁄ 共 1407字 ⁄ 字号 评论关闭

观察者模式

 观察者模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时, 所有依赖于它的对象(观察者)都得到通知并被自动更新。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 {

	@Override
	public void update(Observable observable, Object data) {
		System.out.println("ObserverA 说警察来了,快跑啊...");
	}

}

观察者B:

public class ObserverB implements Observer {

	@Override
	public 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() {
			
	@Override
	public 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();
	}
});


输出:

劫匪跑了......

抱歉!评论已关闭.