装饰设计模式

装饰设计模式: 
当对类的功能进行增强时,可称之为对该类的装饰。 
同时它的出现具备灵活性 

Class Person{ 
  Void chi(){ 
  System.out.println(“chifan”); 
  } 


Class newPerson{ 
  Private Person p; 
  NewPerson(Person p){ 
  This.p = p; 
  } 
  Void newChi(){ 
  System.out.println(“来一杯”); 
  P.chi(); 
  System.out.println(“甜点”); 
  System.out.println(“来一根”); 
  } 



装饰和继承: 
装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。解决给类提供增强型功能的问题。
继承:是面向对象的特征之一。 

例子:(API中没有真实存在的类) 
Writer 
  |--TextWriter 
  |--MediaWriter 
该体系的出现已经可以完成对文本数据和媒体数据的写操作。 
但是发现,效率较低,为了提高效率,就加入了缓冲技术。 
文本写入缓冲 
媒体写入缓冲 
按照面向对象的思想,为了提高扩展,可以通过继承的方式来完成。 
Writer 
  |--TextWriter 
  |--BufferedTextWriter 
  |--MediaWriter 
  |--BufferedMediaWriter 
这样就完成了文本和媒体数据写操作,效率提高。 

当如果该体系加入一个子类BaseWriter,而且该子类也需要效率提高, 
Writer 
  |--TextWriter 
  |--BufferedTextWriter 
  |--MediaWriter 
  |--BufferedMediaWriter 
  |--BaseWriter 
  |--BufferedBaseWriter 
如果体系扩展,都需要定义一个该子类具备高效缓冲功能的子类。 
这样体系扩展很麻烦。 

所以我们发现,这些子类使用的缓冲技术都是一样的,缓冲区其实就是定义了临时存储容器将数据进行临时缓冲,至于具体的写操作,还是writer的子类对象完成的,比如TextWriter等 

既然这样,可以将缓冲技术单独封装成一个对象。要对那个具体的对象进行缓冲技术的使用,只要将对象传递给缓冲区对象即可。 

对缓冲区对象进行单独描述 
Class BufferedWriter extends Writer{ 
  BufferedWriter(Writer w){ 
   
  } 


当缓冲技术单独封装成了对象后,它具备的还是写功能,只不过可以让其他写功能进行高效,所以它还是Writer类中的一员 

所以这时体系变成了这样 
Writer 
  |--TextWriter 
  |--MediaWriter 
  |--BufferedWriter 
和原来的体系 
Writer 
  |--TextWriter 
  |--BufferedTextWriter 
  |--MediaWriter 
  |--BufferedMediaWriter 
  |--BaseWriter 
  |--BufferedBaseWriter 
   
装饰设计模式的出现可以对一组类进行功能的增强。而且装饰类本身也是该体系中的一个子类。 

代码体现: 
  通常情况下, 
  装饰类一般不单独存在。 
  都是通过构造函数接收被装饰的对象 
  基于被装饰的对象的功能,并对外提供增强的功能。 

BufferedWriter//这时一个提供增强功能的类,就把这种优化方式,定义成一种最终解决问题的方案,这种设计模式就是装饰设计模式 

装饰设计模式和继承的区别: 
继承会让体系变得臃肿 
装饰相对来说更为灵活。 

在IO中装饰设计模式用的很多。 
比如 
BufferedWriter 
BufferedReader 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值