摘要: 装饰者模式动态地将责任附加到对象杭,若要拓展功能,装设置提供了比继承更有弹性的替代方案。星巴兹有多种咖啡,它们具有不同的价格。在购买咖啡时,也可以要求在其中加入各种调料,例如豆浆、摩卡、奶泡等等。需要根据所加入的调料收取不同的费用。这里运用”装饰者模式“,以饮料为主体,然后在运行时以调料来“装饰”饮料,比如说顾客想要摩卡和奶泡深焙咖啡,那么哪一个深焙咖啡(DarkRoast)对象以摩卡对象装饰它以奶泡对象装饰它调用cost()方法,并依赖委托(delegate)将调料的价格加上去。看一下装饰者模式的类图是如何实现的:ConcreteComponent是我们要动态地加上新行为的对象每个Compo 阅读全文
posted @ 2013-10-07 20:42 longshaohang 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 我们用Java中自带的观察者模式接口来重写前面的例子。先看一下类图:这里用到了一个setChanged函数,它用来标记状态已经改变的事实,好让notifyObservers()知道当它调用时就应该更新观察者。如果调用notifyObservers()之前没有先调用setChanged(),观察者就不会被通知到。setChanged()方法可以让你在更新观察者时,有更大的弹性,你可以适当地通知观察者。Observable内部是这样的结构:setChanged(){ changed = true; }notifyObservers(Object arg){ if (changed){ ... 阅读全文
posted @ 2013-10-07 19:45 longshaohang 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并且自动更新。我们先看下类图:首先我们自己创建Subject接口,定义了注册观察者,移除观察者和通知观察者三个函数。1 package headfirst.observer.weather;2 3 public interface Subject {4 public void registerObserver(Observer o);5 public void removeObserver(Observer o);6 public void notifyObservers()... 阅读全文
posted @ 2013-10-07 17:20 longshaohang 阅读(377) 评论(0) 推荐(0) 编辑