设计模式——装饰者模式
更多内容,前往 IT-BLOG
现实生活中常常需要给某类产品动态增加新的功能,如:给面条各种调味品。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成一些核心功能。但在不改变其架构的情况下,可以动态地扩展其功能。所以这些都可以采用装饰模式来实现。
一、装饰者定义
【1】装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则。
【2】设计模式属于结构型模式。
【3】这种模式创建一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
【4】优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
【5】缺点:多层装饰比较复杂。
二、装饰者类图
三、案例代码分析
【1】定义一个装饰者和被装饰者都需要集成的抽象类(Food 食物)
【1】JDK 中流的使用用到了装饰者模式。从下面的客户端使用能够得出 FileInputStream 是被装饰者,DataInputStream 是装饰者类的一个实现类,下面就进入 FileInputStream 中查看源代码:
1 //集成最顶层 InputStream 接口,被装饰者也集成的接口,因为此类的返回值要与被装饰类类型相同 2 public class FilterInputStream extends InputStream { 3 /** 4 * 组合 被装饰者类 5 */ 6 protected volatile InputStream in; 7 8 /** 9 * 构造器 10 */ 11 protected FilterInputStream(InputStream in) { 12 this.in = in; 13 } 14 }
【5】源码类图如下:与装饰者类的类图一致,易理解。