Decorator模式或者Wrapper模式允许修饰或者封装一个对象,即使你没有该对象的源代码或者该对象被标识为final。
Decorator模式适用于无法继承该类或者无法创建该类,但是可以从另外的系统中取得该类的实现的情况。
如上图所示,ComponentImpl 为具体的被装饰的类,右侧Decorate为装饰器父类,实现了与ComponentImpl相同的接口函数method()。ConcreteDecorateOne, ConcreteDecorateTwo 为子类,可以扩展Decorate的行为。
Decorate具体代码如下所示:
public class Decorator implements Component {
private Component decorated;
public Decorator(Component component) {
this.decorated = component;
}
@Override
public void method() {
// TODO Auto-generated method stub
decorated.method();
}
}
Note: Decorator类以及被修饰对象的类需要实现相同的接口。