作者:eclipse
可能你已经在用Decorator模式了,但是跟所有其他模式一样,知道你为什么使用它,学习使用它跟别的开发者沟通是很重要的。
Decorator模式,即Wrapper模式,其强制控制作用是在不改动一个类的代码或者不破坏一个类的接口的情况下为该类添加功能。当你想一个类具有更多功能的时候,使用Decorator模式意味着增加功能后的版本不一定要通过扩展类来重用现有功能。
假定有一个叫做Action的接口有两个方法,act1()、act2()。这个接口有一个具体版本ConcreteAction,Decorator将会是一个实现Action的类,其构造器有一个Action(通常是ConcreteAction)。所以代码如下:
public class ActionDecorator implements Action {
private Action action;
public ActionDecorator(Action action) {
this.action = action;
}
public void act1() {
action.act1();
}
public void act2() {
// do nothing
}
}
使用Decorator比使用继承产生更少的类,所以其代码比较简单;但是它通常产生更多的对象,将导致调试难度增加,尤其是因为它增加了灵活度,可能会引入新的错误