装饰(Decorator)模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
一、装饰模式的结构
在装饰模式中的各个角色有:
* 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
* 具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
* 装饰(Decorator)角色:持有一个构件(Component)对象的实力,并定义一个与抽象构件接口一致的接口。
* 具体装饰(Concrete Decorator)角色:负责给构件对象贴上附加的责任。
二、源代码
Component:
<code>public interface Component {
void sampleOperation();
}/<code>
Decorator:
<code>public class Decorator implements Component {
private Component component;
public Decorator(Component component){
this.component = component;
}
public Decorator(){
}
@Override
public void sampleOperation() {
component.sampleOperation();
}
}/<code>
ConcreteCompont:
<code>public class ConcreteComponent implements Component {
@Override
public void sampleOperation() {
}
}/<code>
ConcreteDecorator:
<code>public class ConcreteDecorator extends Decorator {
@Override
public void sampleOperation() {
super.sampleOperation();
}
}/<code>
三、装饰模式应当在什么情况下使用
1.需要扩展一个类的功能,或给一个类增加附加责任。
2.需要动态地给一个对象增加功能,这些功能可以再动态地撤销
3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
閱讀更多 執念媛 的文章
關鍵字: 排列组合 component sampleOperation