本文介绍了GoF中的装饰者模式。
模式推演
需要给多种饮料添加多类调料,并计算价格:
初始设计为:
这样的做法当加入需要加入新的调料时,或者调料的价格发生变化时,必须对类进行修改。
OO原则:类应该对扩展开放,对修改关闭
以装饰的方式将变化的部分封装:
从需求来看,调料是变化部分,不能直接通过继承,修改为独立的调料类,又由于要计算价格,所以,调料类中必须包含一个饮料的对象:
修改基类支持多层装饰
从需求来看,调料是支持多层嵌套的,例如抹茶和红豆,为了支持多层嵌套,我们将饮料和调料继承同一个基类,并定义一些公共的方法,例如cost:
定义
装饰者模式(Decorator Pattern):动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
类图:
典型例子
Java I/O:
1 | InputStream in = new BufferedInputStream(new FileInputStream("abc.txt")); |