定义
装饰模式(DECORATOR):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
类图
component是一个接口对象,现在可以给这些接口对象动态的添加职责,concretecomponent是具体的实现类,也可以给他增加职责,decorator是装饰抽象类,继承了component,从外类来扩展component对象的功能,concretedecorator则是具体的添加的功能。
将component写到装饰抽象类中,这样每个装饰对象的实现就和如何使用这个对象分离开,每个装饰对象只需要关心自己的功能,而不需要关心自己如何被加到对象链当中。
优点
将被装饰对象中的主要核心功能和装饰功能分离开,降低被装饰对象的复杂度,简化类的结构。
JDK类库中的装饰者模式
java.io.BufferedInputStream(InputStream)
java.io.DataInputStream(InputStream)
java.io.BufferedOutputStream(OutputStream)
java.util.zip.ZipOutputStream(OutputStream)
java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap
io包中的BufferedInputStream、DataInputStream是FilterInputStream的子类,FilterInputStream是InputStream的子类,BufferedInputStream、DataInputStream中的read()方法都间接地调用了InputStream的read()方法。
io包中的BufferedOutputStream、util包中的ZipOutputStream是FilterOutputStream的子类,FilterOutputStream是OutputStream的子类,BufferedOutputStream、ZipOutputStream中的write()方法都间接地调用了OutputStream的write()方法。
checkedList是Collections的内部类,checkedList是CheckedCollection的子类,checkedList的add()方法调用了CheckedCollection的typeCheck()方法。