就是在装饰类中新增一个被装饰类的实例,实现的方法可以在被装饰类的功能基础上做添加。适配器有限制的实现类型(匹配接口),装饰模式只是功能上的增加。装饰模式:类的内容一样,但是有一些附加的责任的场景。【书的精装简装】适配器模式:类的内容含义一样,但是需要匹配不同的方式。【书的中文版英文版】适配器的特点在于兼容。
装饰器模式特点在于增强,丰富原功能。
女孩抽象类:描述=女孩中国女孩实现类:描述+=来自中国美国女孩实现类:描述+=来自美国
科学装饰类:描述+=喜欢科学艺术装饰类:描述+=喜欢艺术
客户端:
女孩 americangirl= 美国女孩
americangirl.描述----->女孩来自美国
女孩 lisa = 科学装饰类(americangirl)
lisa.描述----->女孩来自美国喜欢科学
装饰模式java中的I/O文件的操作中都有体现。
Java的IO库中处理流的类有FIleInputStream,FileOutputStream,DataInputStream,DataOutputStream类等。在InputStream,OutputStream,Reader,Writer结构的内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,改善的流处理器。这就体现了装饰模式的作用。同时在一些流处理器的内部有对其他流处理器的功能的适配引用,这体现了适配器模式的优点。
1. InputStream是装饰器的顶层类,一个抽象类!包括一些共有的方法,如:1.读方法――read(3个);2.关闭流的方法――close;3.mark相关的方法――mark、reset和markSupport;4.跳跃方法――skip;5.查询是否还有元素方法――available。图中红色的表示。
2. FileInputStream、PipedInputStream…五个紫色的,是具体的被装饰对象。从他们的“接口”中可以看出他们一般都有额外的方法。
3. FilterInputStream是装饰器中的核心,Decorator对象,图中蓝色的部分。
4. DataInputStream、BufferedInputStream…四个是具体的装饰器,他们保持了和InputStream同样的接口。
5. ObjectInputStream是IO字节输入流中特殊的装饰器,他不是FilterInputStream的子类(不知道Sun处于何种意图不作为FileterInputStream的子类,其中流中也有不少的例子)。他和其他FilterInputStream的子类功能相似都可以装饰其他对象。
IO包中不仅输入字节流是采用装饰器模式、输出字节流、输入字符流和输出字符流都是采用装饰器模式。关于IO中装饰器模式的实现可以通过下面的源代码分析从而了解细节。