這與其他答案非常相似,但不同之處在於它不嘗試實例化抽象類。
三個類似的答案都是使用Composition來解決問題。人們稱之爲門面,另一個適配器。我稱之爲代理。我不確定哪個(如果有的話)是正確的。三者中的重要事實是我們使用組合而不是繼承。
從創建接口開始。 例如:
public interface iA
{
public void doA();
}
public interface iB
{
public void doB();
}
改變你的抽象類來實現這些接口
abstract class A implements iA
{
public void doA()
{
... blah ...
}
}
abstract class B implements iB
{
public void doB()
{
... blah ...
}
}
創建A和B(在這裏我做的C本作內部類)的具體版本,實現下,兩個接口,並將C類中的doA()和doB()調用代理到具體的實現中。
public class C implements iA, iB
{
private ConcreteA cA = new ConcreteA();
private ConcreteB cB = new ConcreteB();
public void doA()
{
cA.doA();
}
public void doB()
{
cB.doB();
}
private class ConcreteA extends A
{
public doA()
{
... blah ...
}
}
private class ConcreteB extends B
{
public doB()
{
... blah ...
}
}
來源
2013-02-19 19:55:33
DwB
我會使用具有所有方法的包裝和使用,B' A'的''實例在幕後,就像一個'Facade'類。事實上,它很大程度上取決於您分析問題的要求,並查看是否存在爲其提供解決方案的[GoF模式](http://en.wikipedia.org/wiki/Design_Patterns)。 – 2013-02-19 19:42:23
是的,我同意Luiggi Mendoza。棘手的部分是你需要多態嗎,e.q. A =新E()?然後,你將會使A和B成爲接口或實現接口。 – kofemann 2013-02-19 19:46:58