一、Java/IO库的设计原则:
1、Java的1O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。
这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。
2、通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。
我们要获取一个1/O对象,往往需要产生多个/O对象,这也是Java 1/0库不太容易掌握的原因,但在1O库中
Decorator模式的运用,给我们提供了实现上的灵活性。

二、装饰模式(Decorator)又名装饰者模式模式
1、动态的将责任附加到对象上,若要扩展功能,装饰者提供比继承更具弹性的替代方案。
2、装饰模式以对客户透明的方式动态的给一个对象附加上更多的责任。换言之, 
客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不创造更多子类的情况下、
将对象的功能加以扩展。
3、装饰模式把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展完全是透明的。
4、装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建
一个包装对象,也就是装饰来包裹真实的对象。
5、装饰对象和真实对象有相同的接口,装饰对象包含一个真实对象的引用,负责将请求转发给真实的对象。
6、装饰对象可以在转发这些请求前后增加一些附加自定义功能。

装饰模式:
·抽象构件角色(Component) :给出一个抽象接口,以规范准备接收附加责任的对象。
·具体构件角色(Concrete Component) :定义一个将要接收附加责任的类。
·装饰角色(Decorator) :持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口
·具体装饰角色(Concrete Decorator) :负责给构件对象“贴上”附加的责任。

三、装饰模式和继承有啥不同 
1、装饰模式:
   (1)、用来扩展特定对象的功能。
   (2)、不需要子类
   (3)、动态,运行时分配职责。灵活。
   (4)、一个给定的对象,同时可能有不同的装饰对象。
2、继承
    (1)、用来扩展一类对象的功能
    (2)、不需要子类
    (3)、静态
    (4)、编译的时候分配职责,缺乏灵活。
    (5)、导致很多子类产生,混杂。

    I/O 系统用了哪些设计模式?为什么要这么做?
    装饰模式保持io体系功能健全的同时避免了更多子类产生。