装饰者模式学习

来源:互联网 发布:centos 教程 编辑:程序博客网 时间:2024/06/06 00:19

装饰者模式学习,记录下来以后看,图和代码都和书上的一模一样。
类图

代码片段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

0 0
原创粉丝点击