装饰者模式

解决的问题

在不改变原有对象结构情况下,为类动态增加功能,避免了通过继承方式进行功能扩充导致的类体系臃肿 ,且可以采用任意顺序组织这些功能。

装饰者模式类图


Component是要被装饰的接口,ConcreteComponent是具体被装饰的类;Decorator是装饰器共同接口,各个具体的装饰器实现相同的装饰器接口;在装饰器中持有被装饰的Component,因为装饰器也继承自Component,所以可以采用如下方式组合使用:
Component target = new ConcreteComponent();
ConcreteDecoratorA decA = new ConcreteDecoratorA(target);
ConcreteDecoratorB decB = new ConcreteDecoratorB(decA); 

IO流使用装饰器模式


IO流的常用手法:
InputStream in = new FileInputStream("file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
reader.readLine();

与代理模式的比较

装饰器模式乍看与代理模式很像,回顾代理模式的类图:
与装饰器模式一样,代理类也继承自目标类,同时持有目标类的引用。但是两者的使用场景不一样,代理模式主要是为了修改目标类的行为和方法,客户端使用的接口还是被代理类型,只不过引用的实际类型是代理类。而装饰器模式中,客户实际使用的就是装饰器类型来包装目标类型,并调用装饰器提供的特殊方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章