装饰者模式

来源:互联网 发布:牛魔王 知乎 编辑:程序博客网 时间:2024/06/08 11:57

对装饰模式的理解:

在装饰模式中的各个角色有:
  (1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
  (2)具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
  (3)装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
  (4)具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。

public abstract class Beverage {//基类,饮料    String description = "Unknow description";    public String getDescription(){        return description;    }    public abstract double cost();}
public class Espresso extends Beverage{/组成饮料的一种材料    public Espresso(){        description = "Espresso";    }    @Override    public double cost() {        return 1.99;    }}
public class HouseBlend extends Beverage{//组成饮料的一中材料    public HouseBlend(){        description = "HouseBlend";    }    @Override    public double cost() {        return .89;    }}
public abstract class CondimentDecorate extends Beverage{    public abstract String getDescription();}
public class Mecha extends CondimentDecorate {//组合几种材料的饮料    Beverage beverage;    public Mecha(Beverage b){        this.beverage = b;    }    @Override    public String getDescription() {        return beverage.getDescription() + "Mecha";    }    @Override    public double cost() {        return .20 + beverage.cost();    }}
public class CoffeTest {//测试用例    public static void main(String[] args){        Beverage beverage = new HouseBlend();        beverage = new Mecha(beverage);        System.out.print(beverage.getDescription() + "$"  + beverage.cost());    }}

装饰模式的UML图:

为何非要Decorator这个类?

装饰模式的实例图:


对装饰模式内部运行机制的理解:其实就是一层层包装


0 0