装饰者模式(Decorator Pattern)
1. 概念
Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。能够在不修改任何底层代码的情况下,给你的或别人的对象赋予新的职责。
2. 应用场景 --比如BufferedInputStream(InputStream&OutStream相关的派生类)
a. 需要扩展一个类的功能时;给一个类增加附加功能。
b. 动态地给一个类增加功能;并能动态地撤销。
c. 需要为一批的兄弟类进行改装或加装功能时。
3. 优点
a. 组件和装饰者可以独立发展,而不互相耦合。
b. 是继承关系的一个替代方案。若使用继承时子类非常多,会导致类爆炸,可用装饰者模式。--使用组合而非继承,可以在运行时动态地进行扩展
c. 可以动态地扩展一个实现类的功能。如要增加新的修饰条件,增加一个ConcreteDecorator即可。
4. 缺点
多层的装饰是比较复杂。
5. 代码实践:
JDK:
•java.io.BufferedInputStream(InputStream)
•java.io.DataInputStream(InputStream)
•java.io.BufferedOutputStream(OutputStream)
•java.util.zip.ZipOutputStream(OutputStream)
•java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]()
Android: TBD
网友评论