装饰模式(Decorator)使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰的类。装饰模式的关键在于这种扩展是透明的。
装饰模式(Decorator)的角色:
- 抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。
- 具体构件(Concrete Component)角色:定义一个附加责任类。
- 装饰(Decorator)角色:持有一个构件对象的实例。并定义一个与抽象构件一样的的接口
- 具体装饰(Concrete Decorator)角色:负责给构件对象贴上附加责任。
在什么情况使用装饰模式?
- 需要扩展一个类的功能,或给一个类增加附加责任。
- 需要动态给一个对象增加功能,这些功能也可以动态地撤销。
- 需要增加一些基本功能的排列组合而产生的非常大的量的功能,从而使继承关系变不的不现实。
代码:
public interface Component
{
void sampleOperation();
}
public class ConcreteComponent implements Component
{
public void sampleOperation()
{
// Write your code here
}
}
public class Decorator implements Component
{
public Decorator(Component component)
{
// super();
this.component = component;
}
public Decorator() {
}
public void sampleOperation()
{
component.sampleOperation();
}
/**
* @link aggregation
*/
private Component component;
}
public class ConcreteDecorator extends Decorator
{
public void sampleOperation()
{
super.sampleOperation();
}
}