面向对象程序设计设计模式论文邓鹏辉(编辑修改稿)内容摘要:

因此它们可以属于不同的抽象化层次。 如果被观察者和观察者都被扔到一起,那么这个对象必然跨越抽象化和具体化层次。 第二、观察者模式支持广播通讯。 被观察者会向所有的登记过的观察者发出通知。 观察者模式有下面的缺点: 第一、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 第二、如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统 崩溃。 在使用观察者模式是要特别注意这一点。 第三、如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自恰的方式进行的。 第四、虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。 在本设计中,经理需要接受点单,然后通知所有的服务员以及做菜的师傅。 由于点单要及时也要高效经济,所以特别适用观察者模式。 经理为 Subject public interface ManagerSubject { public void registerObserver (WaiterObserver o)。 public void removeObserver (WaiterObserver o)。 public void notifyObservers ( )。 }//接口声明。 以下为经理的具体类。 import .*。 public class Manager implements ManagerSubject { private ArrayList waiterObservers。 //储存订阅者,及保存餐厅所有服务员 ,以及后面厨房的厨师 private String newOrder。 //保存定单 public void Manager(){ waiterObservers = new ArrayList()。 } //通知所有的订阅者,及及时将新的定单或修改的定单通知给所有的服务员,以及后面厨房的厨师 public void notifyObservers() { // TODO Autogenerated method stub for (int i = 0。 i ()。 i++) { WaiterObserver observer = (WaiterObserver)(i)。 (newOrder)。 } } //注册订阅者,及给餐厅增加服务员,以及后面厨房的厨师 public void registerObserver(WaiterObserver o) { // TODO Autogenerated method stub (o)。 } //移除订阅者,开除服务员,以及后面厨房的厨师 public void removeObserver(WaiterObserver o) { // TODO Autogenerated method stub int i = (o)。 if (i = 0) (i)。 } //在此时调用通知方法 public void orderChanged() { notifyObservers()。 } //接收新的定单然后通知所有服务员,以及后面厨房的厨师 public void setMeasurements(String order) { = order。 orderChanged()。 } } 注释比较清楚,注册,注销函数。 接收点单,发布点单方法均为基本方法。 服务员和厨师为 Observer public interface WaiterObserver { public void update (String newOrder)。 } 服务员 A 实现两个接口, ReadOrder 接口封装一个阅读点单的方法 : public class WaiterA implements WaiterObserver, ReadOrder { private String order。 private ManagerSubject managerA。 public WaiterA(ManagerSubject managerA ) { = managerA。 (this)。 } public void update(String newOrder) { // TODO Autogenerated method stub = newOrder。 read(orde。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。