在运行时,可能会创建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)。我可以应用任何设计模式,因此无论创建什么表,只要它从TableA扩展出来,TableX都可以支持它。

最佳答案

我认为您是在谈论在顶部TableA对象上添加功能。 Decorator模式可能是您想要的。

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();

09-17 20:35