http://www-128.ibm.com/developerworks/cn/java/l-jdkdp/part3/index.html
关于Bridge模式:
Abstraction中有一个Implementor的引用,client直接调用RefinedAbstraction,屏蔽了实现的细节
通常的,可以在实现部分定义一些基本的原子方法,而在抽象部分则通过组合定义在实现层次中的原子方法
实现系统的功能
JR的http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=41890很好的体现了这一点
http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=12461说的也比较清楚
JAVA的IO是Decorator的经典应用
FilterInputStream(即Decorator类)是InputStream(即Subject类)的子类,具有同Subject相同的interface
Java中的IO还允许你引入自定义的Decorator,来实现自己想要的功能。在良好的设计背景下,这做起并不复杂,只需要4步:
- 创建两个分别继承了FilterInputStream和 FilterOutputStream的子类
- 重载read()和write()方法来实现自己想要的功能。
- 可以定义或者重载其它方法来提供附加功能。
- 确定这两个类会被一起使用,因为它们在功能上是对称的。
JR中http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=39753说明如何设置统一的
interface,使得Decorator可以发挥作用
对于Decorator同继承的区别,文章中也说的比较清楚
注意:
PipedInputStream和PipedOutStream是用来多线程之间的交互(通过管道)
PrintStream只在输出时才有,所以System.err和System.out都是PrintStream的流,而System.in则是没有定义的Stream