设计模式——观察者模式(二)

设计模式老师给的上机实验题目是完成设计模式中的观察者模式,由于上课没听,在上机时临时看《大话设计模式》书中介绍的观察者模式。大鸟和小菜的对话似乎让我初步理解了观察者模式的概念——公司里,员工在上班时聊天,有次被经理抓住,员工们非常紧张。之后他们想到了一个办法,让前台的同事放风,经理进来的时候前台的同事就打电话给一位员工,通知经理来了赶紧工作。在看完这栗子之后我又回过头来看老师给的代码,想了半天都没想出个所以然。之后在网上的技术博客中找到了有关观察者模式的代码,经过仔细的研究终于知道了其中的思路。

观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

客户端类 ObserverDemo  

接口类  ISubject     IObserver

NewsHouse类使用ISubject的接口

Customer类使用IObserver的接口

具体如图:

设计模式——观察者模式(二)_第1张图片

思路解析流程:
 

ObserverDemo客户端类  new NewsHouse office/Customer  cust1/Customer cust2/

方法有office.RegisterObserver();/office.SendNewspaper();/office.RemoveObserver();

 设计模式——观察者模式(二)_第2张图片

 


设计模式——观察者模式(二)_第3张图片


设计模式——观察者模式(二)_第4张图片 


 设计模式——观察者模式(二)_第5张图片

 

 

 

 

设计模式——观察者模式(二)_第6张图片 

运行结果:


设计模式——观察者模式(二)_第7张图片
 

观察者模式其实就是对象间的联动,在此次实验中观察者这个角色其实就是起到当对象发生改变是就要去通知其他对象做出相应的改变;上述实验中cust1被移除之后冲向调用SendNewspaper方法时 观察者NewsHouse类就要重新通知Customer类做出相应的改变;

你可能感兴趣的:(Java-设计模式)