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”)