2009年4月9日星期四

JavaDesign_014:装饰模式 Decorator(摘录+整理)

1. 特点
(1)动态地扩展或增强对象的功能。(2)接口保持不变,即使用者感觉不出装饰前后的变化。
(3)装饰模式可以嵌套。

2. 代码架构(1)定义Component接口(也可用抽象类,视情况而定)。(2)被装饰类Decoratee和装饰类Decorator都实现了Component接口。(3)装饰类Decorator关联被装饰类Decoratee,即含有被装饰类Decoratee实例。
(4)装饰类Decorator的实现方法委派给被装饰类Decoratee,但功能有所增强。
(5)如果需要,可以把装饰类Decorator定义为抽象类,由子装饰类类继承。

3. 与继承方式实现功能拓展的区别
(1)虽然我们通常使用继承来实现功能的拓展,但如果功能的种类很繁多,那么势必要用很多的子类。而且使用继承方式实现功能拓展,必须事先预知要拓展哪些功能,是静态的、编译时就确定了的。
而装饰模式是
由客户端动态决定加入功能的方式和时机,即在运行期间决定何时增加何种功能。
(2)如果新功能是一些基本功能的排列组合,使用继承方式来实现不太现实,因为排列组合的结果太多。
不如使用装饰模式,让使用者自己决定
排列组合哪些基本功能构成一个新功能。

4. Java中对合成模式的应用
(1)IO库中的BufferedReader类。
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);


5. 典型应用场景(1)发票打印使用不同的表头和表尾
(2)论坛的信息过滤功能。

参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏

没有评论: