[toc]
装饰着模式(Decorator)
定义
装饰模式又名 包装(Wrapper
)模式。装饰模式以对 客户端透明的方式 扩展对象的功能,是继承关系的一个替代方案。
装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在 装饰前和装饰后有什么不同。装饰模式可以在 不使用创造更多子类的情况下,将对象的功能加以扩展。
类图
在 装饰模式中的角色有:
抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。
装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。
实例
public abstract class Decorator implements Component{ }
public class ConcreteComponent implements Component{ @Override public void operation() { System.out.println(this.getClass().getName()+":operate");
<span class="o">}</span>
}
public class ConcreteDecorator extends Decorator{ public Component component; public ConcreteDecorator(Component component){ this.component = component; } public void operation() { component.operation(); System.out.println(this.getClass().getName()+":operat"); } }
/客户端:/ public class Client { public static void main(String args[]){ Component component = new ConcreteComponent(); Component decorator = new ConcreteDecorator(component); decorator.operation();
<span class="o">}</span>
}
/输出结果: //com.nemo.design.decorator.ConcreteComponent:operate //com.nemo.design.decorator.ConcreteDecorator:operat