Head First Design Patterns Decorator Pattern

Design Principle(Open-Closed Principle)

  • Classes should be open for extension, but closed for modification.

The Decorator Pattern attaches additional responsibilitis to an object dynamically.

Decorator provide a flexible alternative to subclassing for extending functionality.

public abstract class Beverage{

  String description = "unknown Beverage";

  public String getDescription(){

    return description;

  }

  public abstract double cost();

}

public abstract class CondimentDecorator extends Beverage{

  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 = "House Blend Coffee";

  }

  public double cost(){

    return 0.89;

  }

}

public class Mocha extends CondimentDecorator{

  Beverage beverage;

  public Mocha(Beverage beverage){

    this.beverage = beverage;

  }

  public String getDescription(){

    return beverage.getDescription +", Mocha";

  }

  public double cost(){

    return 0.20 + beverage.cost();

  }

}

原文地址:https://www.cnblogs.com/zhuqiang/p/2469786.html