我的课程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");
我打赌这不可能,但也许我不知道装饰员的一些技巧。
答案 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;
}