Headfirst-3 装饰者模式

来源:互联网 发布:gis软件应用 教学大纲 编辑:程序博客网 时间:2024/04/30 20:22

1         Headfirst-3 装饰者模式

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

1.1      模式设计原则

     对扩展开放,对修改关闭

 

1.2      例子类图

 

装饰者模式

1.1      例子代码

1 Beverage.java

package beverage;

 

public abstract class Beverage {

    String description = "Unknown Beverage";

 

    public String getDescription() {

       return description;

    }

 

    public abstract double cost();

}

 

2  CondimentDecorator.java

package beverage;

 

public abstract class CondimentDecorator extends Beverage {

    public abstract String getDescription();

}

 

3 Espresso.java

package beverage;

 

public class Espresso extends Beverage {

 

    public Espresso() {

       description = "Espresso";

    }

 

    public double cost() {

       return 1.99;

    }

}

 

 

 

4 DarkRoast.java

package beverage;

 

public class DarkRoast extends Beverage {

    public DarkRoast() {

       description = "Dark Roast Coffee";

    }

 

    public double cost() {

       return .99;

    }

}

5 HouseBlend.java

package beverage;

 

public class HouseBlend extends Beverage {

    public HouseBlend() {

       description = "House Blend Coffee";

    }

 

    public double cost() {

       return .89;

    }

}

 

 

 

 

 

6 Mocha.java

package beverage;

 

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 .20 + beverage.cost();

    }

}

7 Soy.java

package beverage;

 

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();

    }

}

8 Whip.java

package beverage;

 

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();

    }

}

 

9 StarbuzzCoffee.java

package beverage;

 

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());

    }

}

 

 

 

 

原创粉丝点击