亦称:封装器、Wrapper、Decorator
Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality.
动态地给一个对象增加一些额外的职责,就拓展对象功能来说,装饰模式比生成子类的方式更为灵活。
模式结构
实现
对敏感数据进行压缩和加密, 从而将数据从使用数据的代码中独立出来。
- DataSource 数据源抽象类
- FileDataSource 文件数据源具体实现类
- DataSourceDecorator 基类装饰器,继承需要装饰的类以及定义需要装饰的方法
- EncryptionDecorator 加密装饰器,writeData负责对数据先加密再调用被装饰的方法;readData负责对数据先解密再调用被装饰的方法
- CompressionDecorator 压缩装饰器,writeData负责对数据先压缩再调用被装饰的方法;readData负责先解压再调用被装饰的方法
- Application 装饰器的简单应用案例
- SalaryManager 工资管理器,不关心数据如何存储,只关心数据内容
- ApplicationConfigurator 在运行时动态配置不同的装饰
适用场景
- 如果你希望在无需修改代码的情况下即可使用对象, 且希望在运行时为对象新增额外的行为, 可以使用装饰模式。
- 如果用继承来扩展对象行为的方案难以实现或者根本不可行, 你可以使用该模式。
- 许多编程语言使用 final 关键字来限制对某个类的进一步扩展。 复用最终类已有行为的唯一方法是使用装饰模式
优缺点