我的场景使用哪种设计模式?

时间:2012-10-18 06:46:54

标签: java oop design-patterns

在运行时期间,可能会创建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功能 - 方法X(),方法Y()适用于TableB,TableC

我无法取出methodX(),methodY()并放入TableA,因为它们是TableX特定的模块功能。

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

2 个答案:

答案 0 :(得分:3)

我认为您正在讨论在顶级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();

答案 1 :(得分:1)

我很难搞清楚你的​​意思,但我认为你想要的是Adapter pattern,也称为Wrapper。