23种设计模式学习之:装饰器模式

装饰器模式:

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

java例子:

下面是java中I/O使用的例子

//FilterInputStream

public class FilterInputStream extends InputStream {
	 protected volatile InputStream in;
	 protected FilterInputStream(InputStream in) {
    	this.in = in;
	 }
	 public int read() throws IOException {
    	return in.read();
  	 }
  	 ......
}

//BufferedInputStream

public class BufferedInputStream extends FilterInputStream {

	public BufferedInputStream(InputStream in) {
        this(in, DEFAULT_BUFFER_SIZE);
    }
	public synchronized int read() throws IOException {
        if (pos >= count) {
            fill();
            if (pos >= count)
                return -1;
        }
        return getBufIfOpen()[pos++] & 0xff;
    }
    ......
}
  1. FileInputStream实现了InputSteam所有接口,并且持有InputStream对象实例的引用;
  2. BufferedInputStream是具体的装饰器实现者,它给InputSteam类附加了功能,这个装饰器类的作用就是使得InputStream读取的数据保存在内存中,提高读取性能。

适配器模式和装饰器模式区别联系:

  1. 适配器和装饰器模式都有一个别名就是包装模式,它们看似都是起到包装一个类或对象的作用;
  2. 适配器模式的意义是要将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的;
  3. 装饰器模式不是要改变被装饰对象的接口,而是要保持原有接口,但是增强原有对象的功能,或改变原有对象的处理方法而提升性能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值