通过咖啡店的咖啡的例子来引出装饰者模式的感性认识。首先是装饰者模式的第一个设计原则:
开放-关闭原则:类应该对扩展开放,对修改关闭。
这个原则其实很好理解,类要保持很好的封装性和可扩展性。公司的业务是一直发展的,所以要保证你的类可以很好的扩展,当修改类时不需要大改动代码。上一章看的观察者模式,当加入观察者时,进行功能的扩展却不需要向主题添加代码。
初识装饰者模式
-
装饰者和被装饰者对象有同样的超类型
-
可以用一个或多个装饰者包装一个对象
-
因为装饰者和被装饰者有相同的超类型,所以在任何需要原始对象(被包装的)的场合,可以 用装饰过的对象代替它
-
装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的
-
对象可以在任何时候被装饰,所以可在运行时动态地,不限量的用你喜欢的装饰者来装饰对象。
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
Java I/O:真正的装饰者
总结
- 继承属于扩展形式之一,但不见得是达到弹性设计的最佳方法。
- 应该允许行为可以扩展,而无须修改现有的代码
- 组合和委托可用于运行时动态地加上新的行为
- 继承,装饰者模式也可以让我们扩展行为。
- 装饰者模式的问题及解决:用装饰者实例化组件时,将增加代码的复杂度,一旦应用了装饰者模式,不只需要实例化组件,还要把组件包装进装饰者,而这样的装饰者有多少个是不确定的。这里可以应用工厂模式来实例化组件来简化操作。