如果没有可用的公共接口,则使用一个类的两个实现的模式

时间:2014-02-19 15:07:07

标签: java design-patterns interface

想象一下,我们有一些界面。我们需要使用此接口的两种不同实现。存在实现。但是存在一个问题:实现不会正式实现该接口。那是因为它们实际上是两个独立的产品,无法通过我们的界面进行调整。

interface Action {
void doAction();
}

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

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

在我们的项目中使用这些实现的最佳方法是什么? 我唯一能想到的是创建两个实现此接口的中间类,并从提供的实现中继承此类。 还有其他想法吗?

2 个答案:

答案 0 :(得分:4)

我不会继承实现类。我只是将adapter pattern委托用于实现类:

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

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

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

... ActionSecondImpl完全相同。

通常情况下,适配器模式需要更多的适应性,而不仅仅是“委托具有完全相同签名的方法”,但它仍然适用于这种简单的情况。

答案 1 :(得分:2)

您只需使用delegation(即delegation pattern):

即可
class ActionImplementingClass implements Action {

    private ActionFirstImpl data;

    // ...

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

}

ActionSecondImpl也可以这样做。