想象一下,我们有一些界面。我们需要使用此接口的两种不同实现。存在实现。但是存在一个问题:实现不会正式实现该接口。那是因为它们实际上是两个独立的产品,无法通过我们的界面进行调整。
即
interface Action {
void doAction();
}
class ActionFirstImpl {
void doAction() {
...
}
}
class ActionSecondImpl {
void doAction() {
...
}
}
在我们的项目中使用这些实现的最佳方法是什么? 我唯一能想到的是创建两个实现此接口的中间类,并从提供的实现中继承此类。 还有其他想法吗?
答案 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
也可以这样做。