读书笔记3:Head First设计模式——装饰者模式

来源:互联网 发布:老司机 种子 知乎 编辑:程序博客网 时间:2024/06/07 19:05

  设计原则:

类应该对扩展开放,对修改关闭


   装饰者模式:

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


装饰者和被装饰者必须是一样的类型,也就是有共同的超类。


public abstract class Beverage {String description = "Unknown Beverage";int size;public String getDescription() {return description;}public int getSize() {return size;}public abstract double cost();}

public abstract class CondimentDecorator extends Beverage {public abstract String getDescription();}

public class HouseBlend extends Beverage {public HouseBlend() {description = "House Blend Coffee";}@Overridepublic double cost() {return 0.89;}}

public class DarkRoast extends Beverage {public DarkRoast() {description = "Dark Roast Coffee";}@Overridepublic double cost() {return .99;}}

public class Espresso extends Beverage {public Espresso() {description = "Espresso";}@Overridepublic double cost() {return 1.99;}}

public class Mocha extends CondimentDecorator {Beverage beverage;public Mocha(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", Mocha";}@Overridepublic double cost() {return 0.20 + beverage.cost();}}

public class Soy extends CondimentDecorator {Beverage beverage;public Soy(Beverage beverage) {this.beverage = beverage;}public String getDescription() {return beverage.getDescription() + ", Soy";}public double cost() {return .15 + beverage.cost();}}

public class Whip extends CondimentDecorator {Beverage beverage; public Whip(Beverage beverage) {this.beverage = beverage;} public String getDescription() {return beverage.getDescription() + ", Whip";} public double cost() {return .10 + beverage.cost();}}

public class StarbuzzCoffee {public static void main(String[] args) {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());}}



原创粉丝点击