Java 覆盖所有方法并自动传递第一个参数的装饰器
我有一个类Java 覆盖所有方法并自动传递第一个参数的装饰器,java,decorator,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); ... 是否可以以某种方式修饰这个类以自动传递标记参数(将存储在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);
...
是否可以以某种方式修饰这个类以自动传递标记参数(将存储在decorator中)
预期产出:
DecoratedBaseClass decorated = new DecoratedBaseClass();
Result result = decorated.methodA("arg1", "arg2");
OtherResult otherResult = decorated.methodC("arg1", "arg2");
我打赌这是不可能的,但也许我不知道装饰师的一些把戏
DecoratedBaseClass decorated = new DecoratedBaseClass(token);
装饰基类中的构造函数
//constructor in baseclass
public DecoratedBaseClass(Token token) {
this.token = token;
}
装饰基类中的构造函数
//constructor in baseclass
public DecoratedBaseClass(Token token) {
this.token = token;
}
您更改了BaseClass
的接口,因此这与decorator无关,它更像是一个适配器
装饰师
动态地为对象附加额外的职责保持相同的界面。
构建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);
}
...
}
您更改了BaseClass
的接口,因此这与decorator无关,它更像是一个适配器
装饰师
动态地为对象附加额外的职责保持相同的界面。
构建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);
}
...
}
您可以有一个接受令牌的构造函数?我现在不能修改BaseClass
——它是用WSDL文件生成的。我将在DecoratedBaseClass
构造函数中创建Token
对象。您可以有一个接受Token的构造函数?我现在不能修改BaseClass
,它是用WSDL文件生成的。我将在DecoratedBaseClass
构造函数中创建Token
对象。当然可以,但我希望避免在decorator中创建方法[A-Z]
,并神奇地完成它。BaseClass
中的方法需要第一个参数,我无法修改它们以从参数中获取值。如果使用Spring,则可以使用依赖项注入。遗憾的是,此项目无法使用Spring。若要在后台传递此令牌
参数,请执行以下操作。我想调用装饰过的.methodA(“arg1”、“arg2”)代码>而不是修饰的.methodA(标记“arg1”、“arg2”)代码>当然可以,但我想避免在decorator中创建方法[A-Z]
,而是神奇地完成它。BaseClass
中的方法需要第一个参数,我无法修改它们以从参数中获取值。如果使用Spring,则可以使用依赖项注入。遗憾的是,此项目无法使用Spring。若要在后台传递此令牌
参数,请执行以下操作。我想调用装饰过的.methodA(“arg1”、“arg2”)代码>而不是修饰的.methodA(标记“arg1”、“arg2”)代码>