簡體   English   中英

如果沒有可用的公共接口,則使用一個類的兩種實現的模式

[英]Pattern for using two implementations of one class if no common interface available

假設我們有一些界面。 我們需要使用此接口的兩種不同實現。 存在的實現。 但是有一個問題:實現沒有正式實現該接口。 那是因為它們實際上是兩個獨立的產品,無法使用我們的界面進行調整。

interface Action {
void doAction();
}

class ActionFirstImpl {
void doAction() {
...
}
}

class ActionSecondImpl {
void doAction() {
...
}
}

在我們的項目中使用這些實現的最佳方法是什么? 我唯一可以想象的是創建兩個中間類來實現此接口,並從提供的實現中對該類進行子類化。 還有其他想法嗎?

我不會繼承實現類。 我只使用適配器模式並將其委托給實現類:

public final class ActionFirstImplAdapter implements Action {
    private final ActionFirstImpl delegate;

    public ActionFirstImplAdapter(ActionFirstImpl delegate) {
        this.delegate = delegate;
    }

    @Override
    public void doAction() {
        delegate.doAction();
    }
}

...與ActionSecondImpl完全相同。

通常,適配器模式需要更多的適應性,而不僅僅是“委托具有完全相同簽名的方法”,但是在這種簡單情況下它仍然可以工作。

您可以簡單地使用委托 (即委托模式 ):

class ActionImplementingClass implements Action {

    private ActionFirstImpl data;

    // ...

    @Override
    public void doAction() {
        data.doAction();
    }

}

使用ActionSecondImpl可以完成相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM