浅析Java IO 设计模式之—装饰器模式

浅析Java IO 设计模式之—装饰器模式

1        浅谈装饰器模式:(以下内容摘自《java与模式》)

     装饰器模式(Decotator)又名包装(Wrapper)模式。包装模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。

   装饰器模式以对客户透明的方式动态地给一个对象附加上更多的责任。换而言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰器模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。

   装饰器的类图如下图所示:

 浅析Java IO 设计模式之—装饰器模式_第1张图片

   在装饰模式中的各个角色有:

1)  抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。

2)  具体构件(Concrete Component)角色:定义一个将要接受附加责任的类。

3)  装饰(Decorator)角色:持有一个构件(Componet)对象的实例,并定义一个与抽象构件接口一致的接口。

4)  具体装饰(Concrete Decorator)角色:负责给构件对象“贴上”附加的责任。

    注:如果你想要深入了解装饰器模式,推荐学习《java与模式》第26章

2        浅谈Java IO:

Java类库中的I/O类分为输入和输出两部分。InputStream 或Reader派生而来的类都含有read()方法,用于读取单个字节或者字节数组。OutputStream或者Writer派生而来的类都含有write()基本方法,用于写单个字节或者字节数组。

1)基于字节的输入流  

浅析Java IO 设计模式之—装饰器模式_第2张图片
2
)基于字节的输出流 
 浅析Java IO 设计模式之—装饰器模式_第3张图片


3
)基于字符的输入流 

浅析Java IO 设计模式之—装饰器模式_第4张图片

 4)基于字符的输出流 

 浅析Java IO 设计模式之—装饰器模式_第5张图片

 

3  JavaIO类图与装饰器模式分析:

OutputStream

浅析Java IO 设计模式之—装饰器模式_第6张图片

   举例:完成一个对FileOutPutStream的包装:

浅析Java IO 设计模式之—装饰器模式_第7张图片

 InputStream类图

浅析Java IO 设计模式之—装饰器模式_第8张图片

举例:对FileInputStream进行包装,使其具有dataInpuStream与BufferedInputStream的功能。

浅析Java IO 设计模式之—装饰器模式_第9张图片

 对于InputStream和OutputStream来说,我们会使用FilterInputStream和FilterOutputStream的装饰器子类来修改(或者说包装)“流”以满足特殊需要。Reader和Writer的类继承层次结构沿用相同的思想----但是并不完全相同。

  Reader与Writer的类图:

 浅析Java IO 设计模式之—装饰器模式_第10张图片

 总结及个人心得:

   首先从文件、网络、内存等得到流后,根据需要进行相应的包装,使其具有更加丰富的功能。

你可能感兴趣的:(Java)