装饰模式
装饰模式又称包装器Wrapper,它描述了如何动态地为对象添加职责。装饰模式是一种结构型模式,这一模式采用递归方式组合对象,从而允许你添加任意多的对象职责。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,实际上Java 的I/O API就是使用装饰模式实现的。
定义
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。
使用场景
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
处理那些可以撤销的职责。
当不能采用生成子类的方法进行扩充时,一种情况是,可能有大量的独立地扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类的定义被隐藏,或类定义不能用于生成子类。
结构
实现
Component接口与具体实现
public interface Component {
void operation();
}
public class ConcreteComponent implements Component {
public void operation() {
System.out.println("ConcreteComponent's operation");
}
}
Decorator类与具体实现
public class Decorator implements Component{
private Component component;
public Decorator(Component component){
this.component = component;
}
public void operation() {
component.operation();
}
}
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
public void operation() {
super.operation();
System.out.println("ConcreteDecoratorA's operation");
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
public void operation() {
super.operation();
System.out.println("ConcreteDecoratorB's operation");
}
}
装饰模式比静态继承更灵活,比如要增加一个新的特性,装饰模式只要多一个Decorator的实现即可,可以避免层次结构高层的类有太多的特性,有种“即用即付”的感觉。但是过多的使用装饰模式会导致系统中有很多相似的对象,不易排错。

本文介绍了装饰模式的概念、结构及应用场景,并通过实例展示了如何动态地给一个对象添加职责,以增加其功能,同时保持高度的灵活性。
1698

被折叠的 条评论
为什么被折叠?



