设计模式学习之装饰器模式

装饰器(Decorator)模式跟适配器(Adapter)模式一样,属于构建型设计模式。在学习适配器模式的时候说过,适配器模式的重点在复用能力,装饰器模式的重点在扩展能力。换言之,装饰器模式是先复用后扩展,这也导致了很多人跟适配器模式混淆。装饰器模式意在实现了相同接口的类,在不继承的情况下,实现组件的功能扩展。多内聚,少继承。例子是从网上摘录下来的:[java] view pl
摘要由CSDN通过智能技术生成

装饰器(Decorator)模式跟适配器(Adapter)模式一样,属于构建型设计模式。在学习适配器模式的时候说过,适配器模式的重点在复用能力,装饰器模式的重点在扩展能力。换言之,装饰器模式是先复用后扩展,这也导致了很多人跟适配器模式混淆。装饰器模式意在实现了相同接口的类,在不继承的情况下,实现组件的功能扩展。多内聚,少继承。例子是从网上摘录下来的:

[java]  view plain copy
  1. interface Sourcable {    
  2.     public void operation();  
  3. }   
[java]  view plain copy
  1. class Source implements Sourcable {    
  2.     public void operation() {    
  3.         System.out.println("原始类的方法");    
  4.     }    
[java]  view plain copy
  1. class Decorator1 implements Sourcable {    
  2.     private Sourcable sourcable;    
  3.     public Decorator1(Sourcable sourcable){    
  4.         super();    
  5.         this.sourcable=sourcable;    
  6.     }    
  7.     public void operation() {    
  8.         System.out.println("第一个装饰器前");    
  9.         sourcable.operation();    
  10.         System.out.println("第一个装饰器后");    
  11.     }  
  12. }  
[java]  view plain copy
  1. class Decorator2 implements Sourcable {    
  2.     private Sourcable sourcable;    
  3.     public Decorator2(Sourcable sourcable){    
  4.         super();    
  5.         this.sourcable=sourcable;    
  6.     }    
  7.     public void operation() {    
  8.         System.out.println("第二个装饰器前");    
  9.         sourcable.operation();    
  10.         System.out.println("第二个装饰器后");    
  11.     }    
  12. }  
[java]  view plain copy
  1. class Decorator3 implements Sourcable {    
  2.     private Sourcable sourcable;    
  3.     public Decorator3(Sourcable sourcable){    
  4.         super();    
  5.         this.sourcable=sourcable;    
  6.     }    
  7.     public void operation() {    
  8.         System.out.println("第三个装饰器前");    
  9.         sourcable.operation();    
  10.         System.out.println("第三个装饰器后");    
  11.     }    
  12. }   
[java]  view plain copy
  1. public class Test {  
  2.     /** 
  3.      * @param args 
  4.      */  
  5.     public static void main(String[] args) {  
  6.         Sourcable source = new Source();  
  7.         // 装饰类对象   
  8.         Sourcable obj = new Decorator1(new Decorator2(new Decorator3(source)));  
  9.         obj.operation();  
  10.     }  
  11. }  

运行该程序的输出如下:

    第一个装饰器前
    第二个装饰器前
    第三个装饰器前
    原始类的方法
    第三个装饰器后
    第二个装饰器后
    第一个装饰器后


一层层装饰,相互之间解耦,如果new的时候换一种顺序,结果又是一种情况,这就是装饰器的巧妙之处。看懂了这个,那么java中的io包的装饰器模式就能了然。装饰器模式是除了继承之外,另一种扩展功能的办法。

参考资料:http://blog.csdn.net/vincentzhao2009/article/details/6201928

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值