观察者模式

观察者模式又叫发布订阅模式

它是处理多个对象依赖于一个对象的一种模式。让多个对象监听一个对象,当这个对象的状态有所改变,他会通知所有被观察对象。

讲个故事:


2017年4月19日下午3点19分  有名武装劫匪正在作案(抢切糕),但是因为朝阳区群众举报,被警察发现并且监视起来。警长把警员分为A队与B队,计划在劫匪作案完准备跑的时候行动,A队负责突击,B队负责警戒周围以防有同伙。

这个故事里面劫匪逃跑的时候就是这个对象的状态有所改变,话不多说。

一、观察者创建

public interface watcher {
	
		public void action();
}
public class policemanA implements watcher{

	@Override
	public void action() {
		System.out.println("突击!---A队");
	}

}
public class policemanB implements watcher{

	@Override
	public void action() {
		System.out.println("警戒!---B队");
	}

}

二、被观察者创建

public interface watched {
	public void addWatcher(watcher watcher);
	public void delWatcher(watcher watcher);
	public void run();
}
import java.util.ArrayList;
import java.util.List;

public class Suspect implements watched {
	List<watcher> list = new ArrayList<watcher>();
	
	public Suspect() {
		System.out.println("正在作案");
	}
	
	@Override
	public void addWatcher(watcher watcher) {
		list.add(watcher);
	}

	@Override
	public void delWatcher(watcher watcher) {
		list.remove(watcher);
	}

	@Override
	public void run() {
		System.out.println("不好被发现了,快跑!");
		for (watcher watcher : list){
			watcher.action();
		}
	}

}

三、运行

public class app {

	public static void main(String[] args) {
		watcher policemanA = new policemanA();
		watcher policemanB = new policemanB();
		
		Suspect suspect = new Suspect();
		//开始监控
		suspect.addWatcher(policemanA);
		suspect.addWatcher(policemanB);
	
		suspect.run();
	}

}


四、结果

正在作案
不好被发现了,快跑!
突击!---A队
警戒!---B队


心得:

一、当一个对象的状态改变的同时需要改变其他对象,我们可以使用观察者模式。

二、观察者模式可以起到松耦合的作用,将两个有依赖关系的对象抽象出来,一个对象细节的改变不影响另一个对象。符合依赖反转原则。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值