0

我的课程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");

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

4

2 回答 2

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);
    }

    ...
}
于 2012-10-07T10:08:06.443 回答
0
DecoratedBaseClass decorated = new DecoratedBaseClass(token);

DecoratedBaseClass 中的构造函数

//constructor in baseclass
public DecoratedBaseClass(Token token) {
    this.token = token;
}
于 2012-09-26T11:08:39.697 回答