[工作中的设计模式]装饰模式decorator

一、模式解析

 装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。

装饰模式的要点主要是:

1、需要对已有对象扩展新的功能,又不希望改变原有对象接口;

2、装饰者对象与原有对象需要继承相同接口,初始化装饰对象时将原有对象传入装饰对象;

3、可以对一个对象定义多个装饰着对象,进行分别装饰或者组合装饰

aaarticlea/png;base64,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" alt="" width="628" height="371" />

二、模式代码

1、抽象接口

package decorator.patten;

public interface Component {
public void operation();
}

2、定义被装饰对象

package decorator.patten;

public class ConcreteComponent implements Component {

    @Override
public void operation() {
System.out.println("我是被装饰对象,我执行了");
} }

3、定义装饰者对象A

package decorator.patten;

public class DecoratorA implements Component {
Component component;
public DecoratorA(Component component){
this.component=component;
}
@Override
public void operation() {
System.out.println("我是装饰对象A,我在被装饰对象前增加打印");
component.operation();
} }

4、定义装饰者对象B

package decorator.patten;

public class DecoratorB implements Component {
Component component;
public DecoratorB(Component component){
this.component=component;
}
@Override
public void operation() {
component.operation();
System.out.println("我是装饰对象b,我在被装饰对象后添加打印");
} }

5、定义客户端

public class Client {
public static void main(String[] args) {
Component component=new DecoratorB(new DecoratorA(new ConcreteComponent()));
component.operation();
}
}

6、执行结果

我是装饰对象A,我在被装饰对象前增加打印
我是被装饰对象,我执行了
我是装饰对象b,我在被装饰对象后添加打印

三、说明

1、装饰着模式可以为被装饰者添加新的功能,,将核心功能和装饰功能进行分离,比如日志打印,字符集处理等
2、可以对对象进行多此装饰,装饰均会被执行
3、示例中多次装饰没有顺序,但实际中往往会是有序的,比如数据加密和数据过滤,如果先加密再过滤就会出现问题
4、装饰对象和被装饰对象均集成同一个接口,有时候为了简化,我们会将装饰对象直接集成被装饰对象,这就是子类重写父类方法达到扩展功能的
四、应用场景

装饰模式最典型的应用就是java IO中对inputstream和outputstream的装饰,例如

dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream("test.txt")
)
);
上一篇:Java基础-synchronized关键字的用法(转载)


下一篇:利用HTML5定位功能,实现在百度地图上定位(转)