装饰者模式学习,记录下来以后看,图和代码都和书上的一模一样。
代码片段1:(饮料抽象类)
public abstract class Beverage {
String description = "Unknown Beverage";
public String getDescription(){
return description;
}
public abstract double cost();
}
代码片段2:(抽象装饰者)
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
代码片段3:(具体的饮料)
public class Espresso extends Beverage {
public Espresso(){
description = "Espresso";
}
@Override
public double cost() {
return 1.99;
}
}
代码片段4:(具体的饮料)
public class HouseBlend extends Beverage {
public HouseBlend(){
description = "HouseBlend";
}
@Override
public double cost() {
return 0.89;
}
}
代码片段5:(具体的装饰者)
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage){
this.beverage = beverage;
}
@Override
public String getDescription() {
return beverage.getDescription() + ", Mocha";
}
@Override
public double cost() {
return 0.2 +beverage.cost();
}
}
代码片段6:(具体的装饰者)
public class Soy extends CondimentDecorator {
Beverage beverage;
public Soy(Beverage beverage){
this.beverage = beverage;
}
@Override
public String getDescription() {
return beverage.getDescription() + " ,Soy";
}
@Override
public double cost() {
return 0.5 + beverage.cost();
}
}
测试代码:
Beverage beverage3 = new HouseBlend();
beverage3 = new Mocha(beverage3);
beverage3 = new Soy(beverage3);
System.out.println(beverage3.getDescription() + " $ " +beverage3.cost());
运行结果:
HouseBlend,Mocha, Soy $ 1.59