动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案
饮料抽象类
public abstract class Beverage{
String description = "";
public String getDescription(){ return description;}
public abstract double cost();
}
调料抽象类---装饰者类
public abstract class CondimentDecorator extend Beverage{
public abstract String getDescription();
}
浓缩咖啡
public class Espresso extends Beverage(){
public Espresso(){ description = "Espresso Coffee"; }
public double cost(){ return 1.99;}
}
摩卡咖啡--具体装饰者
public class Mocha extends CondimentDecorator(){
Beverage beverage;
public Mocha(Beverage beverage){this.beverage = beverage;}
public Mocha getDescription(){ return beverage.getDescription() + ",Mocha" ;}
public double cost(){ return 0.2 + beverage.cost();}
}
Main
Beverage beverage = new Espresso();
beverage = new Mocha(beverage);//Mocha 装饰
beverage = new Mocha(beverage);//Mocha 装饰
beverage = new Whip(beverage);//Whip 装饰
System.out.print(beverage.getDescription()+" $ " + bevarage.cost())
result:
Espresso Coffee,Mocha,Mocha,Whip $ 3.44
扩展:FilterInputStream 装饰者对象
网友评论