设计模式 - 装饰者模式(Decorator Pattern) 详解(二)

2014-11-23 19:28:31 · 作者: · 浏览: 28
0+beverage.cost(); } } /** * @time 2014年5月23日 */ package decorator; /** * @author C.L.Wang * */ public class Soy extends CondimentDecorator { Beverage beverage; public Soy(Beverage beverage) { this.beverage = beverage; } /* (non-Javadoc) * @see decorator.CondimentDecorator#getDescription() */ @Override public String getDescription() { // TODO Auto-generated method stub return beverage.getDescription() + , Soy; } /* (non-Javadoc) * @see decorator.Beverage#cost() */ @Override public double cost() { // TODO Auto-generated method stub return 0.15 + beverage.cost(); } } /** * @time 2014年5月23日 */ package decorator; /** * @author C.L.Wang * */ public class Whip extends CondimentDecorator { Beverage beverage; public Whip(Beverage beverage) { this.beverage = beverage; } /* (non-Javadoc) * @see decorator.CondimentDecorator#getDescription() */ @Override public String getDescription() { // TODO Auto-generated method stub return beverage.getDescription() + , Whip; } /* (non-Javadoc) * @see decorator.Beverage#cost() */ @Override public double cost() { // TODO Auto-generated method stub return 0.10 + beverage.cost(); } }
5. 测试, 创建 具体组件(Concrete Component), 再一层一层添加 装饰者(Decorator)类, 可以实现动态的组合;

代码:

/**
 * @time 2014年5月23日
 */
package decorator;

/**
 * @author C.L.Wang
 *
 */
public class StarbuzzCoffee {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Beverage beverage = new Espresso();
		System.out.println(beverage.getDescription() + 
				 $ + beverage.cost());
		
		Beverage beverage2 = new DarkRoast();
		beverage2 = new Mocha(beverage2);
		beverage2 = new Mocha(beverage2);
		beverage2 = new Whip(beverage2);
		System.out.println(beverage2.getDescription() + 
				 $ + beverage2.cost());
		
		Beverage beverage3 = new HouseBlend();
		beverage3 = new Soy(beverage3);
		beverage3 = new Mocha(beverage3);
		beverage3 = new Whip(beverage3);
		System.out.println(beverage3.getDescription() + 
				 $ + beverage3.cost());
	}
	

}

6. 输出:

Espresso $1.99
Dark Roast, Mocha, Mocha, Whip $1.49
House Blend Coffee, Soy, Mocha, Whip $1.34

面向对象的原则:

对扩展开发, 对修改关闭.

\