装饰器覆盖所有方法并自动传递第一个参数

时间:2012-09-26 11:04:11

标签: java decorator

我的课程BaseClass包含一些方法,例如

public Result mothodA(Token token, String arg1, String arg2);

public Result mothodB(Token token, String arg1);

public OtherResult mothodC(Token token, String arg1, String arg2);

...

是否可以以某种方式装饰此类以自动传递Token参数(将存储在装饰器中)?

预期产出:

DecoratedBaseClass decorated = new DecoratedBaseClass();
Result result = decorated.methodA("arg1", "arg2");
OtherResult otherResult = decorated.methodC("arg1", "arg2");

我打赌这不可能,但也许我不知道装饰员的一些技巧。

2 个答案:

答案 0 :(得分:3)

您更改了BaseClass的界面,因此这与装饰器无关,而是更多的适配器。

  

<强>装饰
  动态地将附加职责附加到对象保持相同的界面。

构建BaseClassAdapter并将调用委托给BaseClass

public class BaseClassAdapter {

    private final BaseClass baseClass;
    private final Token token;

    public BaseClassAdapter(BaseClass baseClass){ 
       this.baseClass = baseClass;
       this.token = ...;
    }

    public Result mothodA(String arg1, String arg2) {
       baseClass.mothodA(token, arg1, arg2);
    }

    ...
}

答案 1 :(得分:0)

DecoratedBaseClass decorated = new DecoratedBaseClass(token);

DecorativeBaseClass中的构造函数

//constructor in baseclass
public DecoratedBaseClass(Token token) {
    this.token = token;
}