java设计模式之装饰设计模式.docx

java设计模式之装饰设计模式.docx

ID:51008949

大小:17.15 KB

页数:4页

时间:2020-03-17

java设计模式之装饰设计模式.docx_第1页
java设计模式之装饰设计模式.docx_第2页
java设计模式之装饰设计模式.docx_第3页
java设计模式之装饰设计模式.docx_第4页
资源描述:

《java设计模式之装饰设计模式.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、装饰设计模式什么是装饰设计模式(Decorationdesignpatterns)呢?当想要对已有的对象进行功能增强时,可以自定义类,将已有对象对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。装饰类通常会通过构造方法接受被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。我们知道IO流中Bufferedwrite()和BufferedReader就是属于装饰类的一种,现在我们通过一个简单程序来看看装饰设计模式的例子:/*以前人们出去都是走路在run方法里描述*/classPerson{publicvoidr

2、un(){System.out.println("走路");}}/*现代的人们出去的方式更多了以前的功能需要增强,自定义了一个增强类称为装饰类*/classModernPerson{privatePersonp;ModernPerson(Personp){this.p=p;}publicvoidrun(){//增强方法p.run();System.out.println("自行车");System.out.println("电动车");System.out.println("公交车");}}classDecorationDesign

3、PatternsDemo{publicstaticvoidmain(String[]args){Personp=newPerson();//p.run();需求不够,被弃用,使用装饰类里的增强型run方法ModernPersonmp=newModernPerson(p);//将以前Person对象传给装饰类的构造方法mp.run();//增强性run方法。}}很多人就会疑惑了,我们可以使用继承去实现啊?但是如果使用继承的话,我们来看看继承的使用与装饰类的区别:我们假设一个体系MyReader是父类中的最顶层,父类下面有三个子类MyT

4、xtReader,MyMediaReader,MyDataReader。而这三个类是由于功能上的不足,我们分别继承这三个类来增强功能。MyBufferedTxtReader,MyBufferedMediaReader,MyBufferedDataReader。我们看到一个MyReader体系:MyReader

5、--MyTxtReader

6、--MyBufferedTxtReader

7、--MyMediaReader

8、--MyBufferedMediaReader

9、--MyDataReader

10、--MyBufferedDataReader

11、我们想通过一个类来使用传特定对象的方式,哪部分需要增强我们就传那部分的对象。所以看下面classMyBufferedReader{MyBufferedReader(MyTxtReadertext){}MyBufferedReader(MyMediaReadermedia){}MyBufferedReader(MyDataReaderdata){}}我们看到上面MyReader因为需求如果又出现了很多的子类,那么就又得在内部改代码,这样麻烦。可以看到上面的这个类扩展性极差。那么我们怎么办呢?我们想到我们何不找一个期参数的共同类型,通过

12、一种多态的形式来提高扩展性。那么我们知道MyReader是父类的顶层,我们把他作为参数类型。classMyBufferedReaderextendsMyReader(){MyBufferedReader(MyReaderr){};}那么我又看到MyReader的体系发生了变化MyReader

13、--MyTxtReader

14、--MyMediaReader

15、--MyDataReader

16、--MyBufferedReader我们看到装饰模式比继承要灵活的多。避免了继承体系的臃肿。而且降低了类与类之间的关系。我们知道装饰类因为增强已有对象,具

17、备的功能和已有的是相同的,只不过提供了更强的功能。所以装饰类和被装饰类都属于一个体系中的。其实我所说的就是IO流中体系,我们看看IO流中的装饰设计模式。我在这呢我复写了BufferedReader的readLine方法并继承了Reader类。importjava.io.*;classMyBufferedextendsReader{privateReaderfr;MyBuffered(Readerfr){this.fr=fr;}//复写了父类的readLinepublicStringreadLine()throwsIOExceptio

18、n{StringBuildersb=newStringBuilder();inti=0;while((i=fr.read())!=-1){if(i=='r')continue;if(i=='')returnsb.toString

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

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

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