装饰者模式

简介

定义: 动态地给一个对象添加一些额外的职责。例如:当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。

使用场景:

  • Java I/O流(InputStream, OutputStream)

  • Servlet API(Wrapper)

  • 咖啡店点单系统

实现要点:

  • 装饰器持有被装饰对象

  • 装饰器实现相同接口

  • 可以多层装饰

UML

spinner

代码示例

  1. 基础咖啡接口

public interface Coffee {
    
    /**
     * 获取咖啡描述
     */
    String getDescription();
    
    /**
     * 获取咖啡价格
     */
    double getCost();
    
    /**
     * 获取咖啡详细信息
     */
    default String getDetails() {
        return String.format("%s - ¥%.2f", getDescription(), getCost());
    }
}
  1. 具体的咖啡

  1. 咖啡装饰者抽象器

  1. 咖啡具体装饰

  1. 使用方式

Last updated