2012-09-26 57 views
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"); 

我敢打賭,這是不可能的,但也許我不知道一些技巧與裝飾。

+0

你可以有一個構造函數,需要令牌嗎? – dngfng

+0

我現在無法修改'BaseClass' - 它是使用WSDL文件生成的。我將在'DecoratedBaseClass'構造函數中創建'Token'對象。 – hsz

回答

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

    ... 
} 
0
DecoratedBaseClass decorated = new DecoratedBaseClass(token); 

構造函數,DecoratedBaseClass

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

當然,但我想避免在裝飾器中創建'方法[A-Z]'並且神奇地做它。 'BaseClass'中的方法需要第一個參數,我不能修改它們以從參數中獲取值。 – hsz

+0

如果你使用Spring,你可以使用依賴注入。 – dngfng

+0

不幸的是,這個項目不能使用Spring。 – hsz