OO设计模式03—装饰者模式
OO设计模式—装饰者模式
设计原则tip:类应该对拓展开放,对修改关闭。(在不修改现有代码的情况下,就可搭配新的行为)
装饰者模式:动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。
以下是《模式设计》书中的星巴克咖啡例子:
public abstract class Beverage{String description = "Unknown Beverage";public String getDescription(){return description;}public abstract double cost();}public abstract class CondimentDecorator extends Beverage //咖啡的调料,所有调料装饰者必须覆写getDescription方法{public abstract String getDescription();}//一些基本饮品,作为基本组件public class Espresso extends Beverage{public Espresso(){description = "Espresso";}public double cost(){return 1.99;}}public class HouseBlend extends Beverage{public HouseBlend(){description = "HouseBlend";}public double cost(){return .98;}}//以下为调料,作为装饰者public class Mocha extends CondimentDecorator{Beverage beverage;public Mocha(Beverage beverage){this.berverage = berverage;}public String getdDescription(){return berverage.getDescription();}public double cost(){return .20 + berverage.cost();}}//测试代码public class StarbuzzCoffee{public static void main(String[] args){Berverage beverage = new Espresso();System.out.println(berverage.getDescription()+ "$" +berverage.cost());Berverage beverage2 = new HouseBlend();beverage2 = new Mocha(beverage2);beverage2 = new Mocha(beverage2);beverage2 = new Whip(beverage2);//添加调料System.out.println(berverage.getDescription()+"$"+berverage.cost());}}