Decorator 装饰模式

装饰者模式

主要用于给一个对象动态的添加一些额外的职责。Client 可以灵活的组合对象与其功能,对象可扩展,功能可扩展。


修饰者的动态特性 

在运行时,修饰者将方法调用传递给被修饰者,如图3所示: 


图3 修饰者的动态特性



Decorator 在java io 中的应用

Java的IO是由一些基本的原始流处理器和围绕它们的装饰流处理器所组成的。所谓链接流处理器,就是可以接收另一个(同种类)的流对象作为流源,并对之进行功能扩展的类。可以知道,所谓有链接流就是装饰角色,而原始流就是具体构件角色.一方面,链接流对象接收一个同类型的原始流对象或者另一个同类型的链接流对象作为流源,另一方面,它们都对流源对象的内部工作方法做了相应的改变,这种改变誻装饰模式所要达到的目的,比如: 
BufferedInputStream装饰了InputStream的内部工作方式,使得流的读入操作使用缓冲机制,在使用缓冲机制后,不会对每一次的流读入操作都产生一个物理读盘动作,从而提高了程序的效率. 

抽象结构图

  按照上面的这种原始流处理器和链接流处理器的划分,可以用下面的结构图来描述它们之间的关系。

  

 

 上面的流处理器图跟装饰模式的结构图有着显而易见的相同之处。实际上InputStream类型的流处理器结构确实符合装饰模式。 

 装饰模式结构图

 

  对于上图FilterInputStream查看JDK1.4源代码,部分代码如下:

Public class FilterInputStream extends InputStream {
    /**
     * The input stream to be filtered.
     */
    protected InputStream in;
    protected FilterInputStream(InputStream in) {
        this.in = in;
    }
    //其它代码
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值