Technology-设计模式-装饰者模式

本文介绍了GoF中的装饰者模式。

模式推演

需要给多种饮料添加多类调料,并计算价格:

初始设计为:

Technology-DesignPattern-Decorator-Request

这样的做法当加入需要加入新的调料时,或者调料的价格发生变化时,必须对类进行修改。

OO原则:类应该对扩展开放,对修改关闭

以装饰的方式将变化的部分封装:

从需求来看,调料是变化部分,不能直接通过继承,修改为独立的调料类,又由于要计算价格,所以,调料类中必须包含一个饮料的对象:

Technology-DesignPattern-Decorator-Change

修改基类支持多层装饰

从需求来看,调料是支持多层嵌套的,例如抹茶和红豆,为了支持多层嵌套,我们将饮料和调料继承同一个基类,并定义一些公共的方法,例如cost:

Technology-DesignPattern-Decorator-SuperClass

定义

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

类图:

Technology-DesignPattern-Decorator-Class

典型例子

Java I/O:

1
InputStream in = new BufferedInputStream(new FileInputStream("abc.txt"));