2011-06-10 11 views
1

是否有某種模式/解決方案可用於實現以下目標:改變API接口名稱的Java模式?

我正在使用具有名爲ApiInterface的接口的API。
該接口有1個方法:void apiMethod(BaseType val);

現在,我想用這個功能,但我想用我自己的接口,不同的方法名稱,以及BaseType亞型:

interface MyInterface { 
    void myMethod(MyType val); 
} 

MyType的延伸基本類型。 myMethod應該只調用apiMethod,唯一的區別是它使用MyType。

有沒有辦法創建MyInterface這樣它只是傳遞到ApiInterface但使用不同的方法名稱和我自己的BaseType擴展?我設法使用擴展ApiInterface的抽象類來實現這一點,但我想使用一個接口,而不是一個類。

+1

在接口不能「公開功能」,他們沒有行爲,只有常量和方法合同。如果你想提供實現(委託給'ApiInterface'),你需要通過一個類來完成。 – 2011-06-10 16:00:06

回答

2

您可以嘗試適配器設計模式。它會幫助你。

0

首先,接口不執行任何操作。所以,你應該ApiInterface定義:

void apiMethod(BaseType val); 

,要麼應該實現此方法的一些具體類或者你必須自己實現它。

但除此之外,您可能需要一個適配器。

public interface ApiAdapter{ 
    void myMethod(MyType val); 
} 

public class ConcreteAdapter implements ApiAdapter{ 
    void myMethod(MyType val){ 
     ApiInterface api = new ConcreteApiClass(); 
     api.apiMethod(val);//should work since MyType extends BaseType 
    } 
} 

現在,在你的代碼,你可以聲明ConcreteAdapter對象和使用的MyType沒有任何參考ApiInterface調用myMethod的等

0

怎麼是這樣的:

public class ApiAdapter implements MyInterface { 
    private final ApiInterface delegate; 

    public ApiAdapter(ApiInterface delegate) { 
    this.delegate = delegate; 
    } 

    public void myMethod(MyType value) { 
    delegate.apiMethod(value); 
    } 
} 

現在,如果你有一些代碼它提到了一個ApiInterface實例,並且想要將其轉換爲MyInterface實例,則可以這樣做:

現在
ApiInterface instance = ...; 
MyInterface adaptedInstance = new ApiAdapter(instance); 

可以用手關閉adaptedInstance的人誰需要一個MyInterface