【设计模式】 装饰者与IO、Collection框架

【设计模式】 装饰者与IO、Collection框架

ID:40301848

大小:37.50 KB

页数:4页

时间:2019-07-30

【设计模式】 装饰者与IO、Collection框架_第1页
【设计模式】 装饰者与IO、Collection框架_第2页
【设计模式】 装饰者与IO、Collection框架_第3页
【设计模式】 装饰者与IO、Collection框架_第4页
资源描述:

《【设计模式】 装饰者与IO、Collection框架》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、【设计模式】装饰者与IO/Collection框架文章分类:Java编程装饰者模式     继承是OOP程序设计的一大特点,但其实对于很多复杂问题来说,利用继承关系处理问题往往具有很高的耦合性,不利于代码的维护。利用组合很大程度上可以做到降耦。多用组合,少用继承是OOP设计的重要思想。     装饰者模式给我们提出了一个好的OOP设计原则:类应该对扩展开放,对修改关闭。     这句话的意思就是,如果问题发生改变,衡量一个好的设计标准就是:你不需要修改类中的代码,只需要扩展新类来适应新的行为。    《HeadF

2、irstDesignPatterns》对装饰者模式说的很清楚。这里稍微注意几点:            (1)装饰者和被装饰者必须具有相同的超类型。     (2)装饰者即可以包装被装饰者,也可以包装装饰者。往往利用多层包装来达到目的。     (3)装饰者中组合了被装饰者对象,这是装饰类的关键特征。正是由于这种组合,使得我们能够随心所欲的通过嵌套装饰来动态扩展行为。 JavaIO框架的装饰者设计在java类库中的IO流就是用装饰者模式设计的。JDK5.0中60多个IO流类组成了四大家族:InputStream,

3、OutputStream,Reader,Writer。     InputStream/OutputStream是对字节序列进行操作的抽象类。     Reader/Writer是基于Unicode代码单元进行操作的抽象类。这四大家族中大量的类都具有自己不同的功能,要做到方便的完成各种输入输出行为。必须组合使用这些类,装饰者模式是再好不过的设计了。那么IO类库如何实现装饰者模式的,我们看看几个类的部分源码://InputStream:字节序列输入类鼻祖publicabstractclassInputStreami

4、mplementsCloseable{//最基本的读取字节的抽象方法,供子类扩展。publicabstractintread()throwsIOException;}//FileInputStream:读取文件中的字节流类继承InputStreampublicclassFileInputStreamextendsInputStream{//构造器publicFileInputStream(Stringname)throwsFileNotFoundException{//.......}//本地方法,与操作系统低层

5、交互的具体读入方法publicnativeintread()throwsIOException;}//FilterInputStream:过滤流类,起装饰器作用,用于对输入装配各种功能publicclassFilterInputStreamextendsInputStream{//用于记录被装饰者,也就是需要装配新功能的InputStream对象protectedvolatileInputStreamin;protectedFilterInputStream(InputStreamin){//构造装饰器this.

6、in=in;//设置需要被包装InputStream对象}//读入字节publicintread()throwsIOException{returnin.read();}}//BufferedInputStream:使输入流具有缓冲功能,是一种可以装配缓冲功能的装饰器,继承FilterInputStreampublicclassBufferedInputStreamextendsFilterInputStream{//构造器publicBufferedInputStream(InputStreamin){this

7、(in,defaultBufferSize);//in就是被装配缓冲功能的InputStream}} 这四个类同属于InputStream家族,他们就是一个经典的装饰器模式设计。其中      InputStream具有读入功能的抽象被装饰器。      FileInputStream 具有读入文件功能的具体被装饰器      FilterInputStream 具备装饰器的抽象意义。      BufferedInputStream  具有具体功能(缓冲功能)的装饰器。这个时候后我想设计一个具有缓冲功能的读取文

8、件中的字节的行为:publicvoidIOTest{//缓冲装饰器包装文件字节输入流BufferedInputStreambis=newBufferedInputStream(newFileInputStream("C://decorator.txt"));//读取内容bis.read();} IO类库中还有很多其他的装饰器,比如处理基本数据类型的DataInputStr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。