装饰者模式

装饰者模式

 动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案

 

 

 

装饰者模式

 

 

装饰者模式

 

 

 

 

 

 

 

 

 

 

 装饰者模式

 

 

 

装饰者模式

 

 看了以上四张图片之后,觉得是不是很晕呢?

不要紧,接下来看看代码:

 

 

 

package com.disign.decorator; /** * 抽象组件 * @author Administrator * */ public abstract class Beverage { String description = "Unknown Beverage"; public String getDescription() { return description; } public abstract double cost(); } package com.disign.decorator; package com.disign.decorator; /** * 具体组件 浓咖啡 * @author Administrator * */ public class Espresso extends Beverage { public Espresso(){ description = "Espresso"; } @Override public double cost() { return 1.99; } } package com.disign.decorator; /** * 具体组件 家常咖啡 * @author Administrator * */ public class HouseBlend extends Beverage { public HouseBlend(){ description = "House Blend coffee"; } @Override public double cost() { return 0.89; } } package com.disign.decorator; /** * 摩卡 (调料装饰者) * @author Administrator * */ public class Mocha extends CondimentDecorator { Beverage beverage; public Mocha(Beverage beverage){ this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription()+",Mocha"; } @Override public double cost() { return 0.20+beverage.cost(); } } package com.disign.decorator; /** * 豆浆 装饰者 * @author Administrator * */ public class Soy extends CondimentDecorator { Beverage beverage; public Soy(Beverage beverage){ this.beverage = beverage; } @Override public String getDescription() { return beverage.description+",Soy"; } @Override public double cost() { return 0.11+beverage.cost(); } } package com.disign.decorator; public class Test { /** * @param args */ public static void main(String[] args) { Beverage beverage1 = new Espresso(); System.out.println(beverage1.getDescription() +"$"+beverage1.cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); System.out.println(beverage3.getDescription() +"$"+beverage3.cost()); } }

 

看了之后,我觉得这里面有几个概念了,组合、继承、委托、装饰者、被装饰者、静态调用、运行时动态调用

理解这些,我觉得这个装饰者模式就开始清楚点了