1.抽象被装饰者,通常是抽象类 2.具体被装饰者 3.抽象装饰者,通常是抽象类,并继承自抽象被装饰者 4.具体抽象者
2.1有一个饮品系统,其有具体饮品,以及配料。那么明显的配料就是饮品的装饰者。
2.2类图
2.3实现 Beverage.java (抽象被装饰者)
public abstract class Beverage { public String description = "unkonw beverage"; public Beverage() { } public Beverage(String description) { this.description = description; } public String getDescription() { return description; } public abstract double Cost(); }housblend.java (具体饮品,也就是具体的被装饰者)
public class HousBlend extends Beverage { public HousBlend() { super("housblend"); } public double Cost() { return 0.89; } }codimentdecorator.java(抽象装饰者)
public abstract class CondimentDecorator extends Beverage { protected Beverage beverage; public CondimentDecorator(Beverage beverage) { this.beverage = beverage; } public abstract String getDescription(); public double Cost() { return beverage.Cost(); } }Mocha.java(具体装饰者)
public class Mocha extends CondimentDecorator { public Mocha( Beverage beverage) { super(beverage); } public String getDescription() { return beverage.getDescription() + ", mocha "; } public double Cost() { return beverage.Cost()+0.20; } }装饰者对被装饰者的装饰。
//声明一个具体的饮品 Beverage be = new HousBlend(); //使用配料装饰、 be = new Mocha(be);使用装饰者模式,在以后需要添加配料或者修改配料的价钱时,并不需要被装饰者的源码、
