JAVA系列-设计模式-观察者模式
来源:互联网 发布:临高启明知乎 编辑:程序博客网 时间:2024/04/30 02:11
定义:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
package Observer;import java.util.ArrayList;import java.util.List;public abstract class Citizen { List pols; String help = "normal"; public void setHelp(String help) { this.help = help; } public String getHelp() { return this.help; } abstract void sendMessage(String help); public void setPolicemen() { this.pols = new ArrayList(); } public void register(Policeman pol) { this.pols.add(pol); } public void unRegister(Policeman pol) { this.pols.remove(pol); }}
package Observer;public class HuangPuCitizen extends Citizen { public HuangPuCitizen(Policeman pol) { setPolicemen(); register(pol); } public void sendMessage(String help) { setHelp(help); for(int i = 0; i < pols.size(); i++) { Policeman pol = (Policeman) pols.get(i); //通知警察行动 pol.action(this); } }}
package Observer;public class TianHeCitizen extends Citizen { public TianHeCitizen(Policeman pol) { setPolicemen(); register(pol); } public void sendMessage(String help) { setHelp(help); for (int i = 0; i < pols.size(); i++) { Policeman pol = (Policeman) pols.get(i); //通知警察行动 pol.action(this); } }}
package Observer;public interface Policeman { void action(Citizen ci);}
package Observer;public class HuangPuPoliceman implements Policeman { public void action(Citizen ci) { String help = ci.getHelp(); if (help.equals("normal")) { System.out.println("一切正常, 不用出动"); } if (help.equals("unnormal")){ System.out.println("有犯罪行为, 黄埔警察出动!"); } }}
package Observer;public class TianHePoliceman implements Policeman { public void action(Citizen ci) { String help = ci.getHelp(); if (help.equals("normal")) { System.out.println("一切正常, 不用出动"); } if (help.equals("unnormal")) { System.out.println("有犯罪行为, 天河警察出动!"); } }}
package Observer;/** * 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 * 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装成独立的对象中以使它们可以各自独立地改变和复用。 2.当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。 3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁。 * @author Administrator * */public class Test { public static void main(String[] args) { Policeman thPol = new TianHePoliceman(); Policeman hpPol = new HuangPuPoliceman(); Citizen citizen = new HuangPuCitizen(hpPol); citizen.sendMessage("unnormal"); citizen.sendMessage("normal"); System.out.println("==========="); citizen = new TianHeCitizen(thPol); citizen.sendMessage("normal"); citizen.sendMessage("unnormal"); }}
运行结果
有犯罪行为, 黄埔警察出动!
一切正常, 不用出动
===========
一切正常, 不用出动
有犯罪行为, 天河警察出动!
- JAVA系列-设计模式-观察者模式
- Java设计模式系列之观察者模式
- java设计模式系列之观察者模式
- 设计模式系列:观察者模式
- 【设计模式系列】--观察者模式
- Java/Android 设计模式系列(2)--观察者模式
- java设计模式-----观察者
- JAVA 观察者设计模式
- java观察者设计模式
- java观察者设计模式
- java 观察者设计模式
- JAVA-观察者设计模式
- JAVA设计模式--观察者
- Java---观察者设计模式
- Java设计模式:观察者
- Java设计模式-观察者
- java观察者设计模式
- java设计模式-观察者模式
- MYSQL中间件研究(Atlas,Cobar,TDDL)
- 黑马程序员——java基础之IO流
- Sizeof与Strlen的区别与联系
- 我是不是该换个工作
- POJ 2251 Dungeon Master (BFS)
- JAVA系列-设计模式-观察者模式
- 让apache支持jsp
- CODE 119: Integer to Roman
- Cpp Primer CH11 异常处理
- 统计单词个数
- ubuntu下mysql及mysql administrator的下载安装
- 以安装wordpress为例搭建apache+php+mysql的Web服务环境
- UIActionSheet+Blocks
- 菜鸟的学习之路(9) — ArrayList类