Java设计模式——装饰者模式

和上一章提到的适配器模式很类似,但是装饰者模式和其还是有一定区别的。适配器模式往往是把两个不同标准的接口动态结

起来,解决不兼容的问题。而装饰者模式往往是装饰者对象和被装饰对象都实现同一个接口,装饰对象持有被装饰对象的实例,

的添加一些新功能。

标准接口:

public interface Sourceable {
	public void method1();
}
被装饰类:

public class Source implements Sourceable {

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("This is the origin method.");
	}

}
装饰类:

public class Decorator implements Sourceable {

	private Sourceable s;

	public Decorator(Sourceable s) {
		this.s = s;
	}

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		s.method1();
		System.out.println("After decoration...");
	}

}
测试类:

public class TestDecorator {

	@Test
	public void test() {
		Decorator decorator = new Decorator(new Source());
		decorator.method1();
	}

}

装饰器模式的应用场景:

1、需要扩展一个类的功能。

2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)


最常见的一个应用就是Java IO中的运用。



以输出流为例,它本身是一个抽象类,其中定义了各种抽象方法。这些抽象方法都在子类中获得实现。注意这里的

FilterOutputStream,在其类内部维护了一个OutputStream对象,在FilterOutputStream的构造方法中会赋一个OutputStream的实

例。将FilterOutputStream的操作交给OutputStream对象来做,这个类本身什么事都没有做。但是这个类有三个很重要的子类,如上

图所示。举一个例子,以BufferedOutputStream为例,提供了数据的缓冲功能。在这个类内部,对write方法进行了重写。在这里,

BufferedOutputStream就相当于是一个装饰者,为原本不存在缓冲功能的OutputStream加上了缓冲的功能。

装饰者模式的几个例子:

 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File...));

 PrintStream ps = new PrintStream(new FileOutputStream(new File...));


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值