JAVA系列-设计模式-观察者模式
2013-11-10 14:21
465 查看
定义:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
运行结果
有犯罪行为, 黄埔警察出动!
一切正常, 不用出动
===========
一切正常, 不用出动
有犯罪行为, 天河警察出动!
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
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设计模式学习系列之六:Observer, 观察者模式---小例
- Java设计模式系列之观察者模式
- java设计模式——观察者模式
- java设计模式(3)观察者模式
- Android设计模式系列--观察者模式
- Java设计模式:观察者模式以及Servlet中的Listener
- 设计模式之Java自定义观察者模式
- Java/Android设计模式<二>观察者模式
- Java设计模式菜鸟系列(二十一)享元模式建模与实现
- 【JAVA设计模式-第四课】观察者模式-屌丝求职记+新闻订阅
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- Java设计模式——观察者模式
- 【Java常用类库】_观察者设计模式笔记
- java设计模式(3) - 观察者模式(Observer)
- java设计模式之观察者模式
- Java设计模式之观察者模式
- Java设计模式--观察者模式
- Android设计模式系列--观察者模式
- Java设计模式-观察者模式