【Head First设计模式-读书笔记】装饰者模式

类图

装饰者模式

定义

装饰者模式-动态的将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

  实际上就是组合的一种比较巧妙的用法。选择一个主体,然后选择不同的组件进行组装。这样的模式更加灵活,更加动态,出现新的组装时,不需要去更改到底层的代码。
  比方当一杯咖啡为主体,糖,牛奶,巧克力等等为装饰者,这样就可以用组合的方式来组成多种不同的咖啡而不用重新写多个不同的咖啡类。

原则

对扩展开放,对改变关闭

  • 扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
  • 修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的。

要点

优点

  1. 继承属于扩展方式的一种,但但不见得是达到弹性设计的最佳方案。装饰者可以扩展行为并具有弹性。
  2. 应允许行为被扩展,而无需修改现有的代码。
  3. 组合和委托可用于运行时动态的加上新的行为。
  4. 可以用多个组件装饰同一个主体。
  5. 装饰者可以反应出被装饰者的类型。

缺点

  • 装饰者会导致设计出现很多小类,如果过度使用反而会使程序变得复杂。Java I/O就是一个例子。
原文地址:https://www.cnblogs.com/A-yes/p/9894202.html