1

在运行时,可能会创建 TableA 或 TableB 或 TableC。

public class TableA  {
    public void methodA()  {
        doSomethingA();
    }

    public void methodB() {
        doSomethingB();
    }
}

public class TableB extends TableA  {
    @Override
    public void methodA()  {            
    }

    protected void methodC()  {
    }
}

public class TableC  extends TableA {
    @Override
    public void methodB()  {            
    }

    public void methodD()  {
    }
}

我有另一个名为 TableX 的表。

public class TableX  extends TableA {

    public void methodX()  {       
    }

    public void methodY()  {
    }
}

现在我想要 TableX 功能-methodX(), methodY() 适用于 TableB, TableC

我不能取出 methodX()、methodY() 并放入 TableA,因为这些是 TableX 特定的模块功能。

所以现在在运行时可能会创建 TableA、TableB、TableC、TableX(TableA)、TableX(TableB)、TableX(TableC)。我可以应用任何设计模式,这样无论创建什么Table,只要它是从TableA扩展而来的,TableX也可以支持它。

4

2 回答 2

3

我认为您正在谈论在顶级TableA对象上添加功能。装饰图案也许是您正在寻找的。

class TableX extends TableA {
    private TableA innerObject;
    public TableX(TableA inner) { innerObject = inner; }

    public methodA() {
        innerObject.methodA(); 
        ....
    }

    ...
}

TableB bObject = new TableB();
TableX decoratedBObject = new TableX(bObject);
decoratedBObject.methodA();
于 2012-10-18T07:56:27.743 回答
1

我很难弄清楚你的意思,但我认为你想要的是Adapter 模式,也称为 Wrapper。

于 2012-10-18T06:52:53.133 回答