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

Java 我的场景使用哪种设计模式?,java,oop,design-patterns,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

在运行时,可能会创建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也可以支持它。

我很难理解你的意思,但我认为你想要的是一个包装器。

我很难理解你的意思,但我认为你想要的是一个,也被称为包装器。

我想您是在谈论在顶部
表a
对象上添加功能。模式可能就是你要找的

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

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

在这种情况下,装饰器和适配器之间有区别吗?我似乎不明白其中的区别,尽管我觉得这两种模式的意图是不同的……你是对的,有一条细线。我认为limckmy正在寻找
Decorator
的原因是这行
公共类TableX扩展了TableA{ /代码>所以他/她正在寻找包裹对象并保持相同的接口。在适配器的情况下,你会给包裹对象提供一个新的接口。好捕捉Sameer!我确信适配器也是答案,直到你指出这一点。SAMEL:我有一个解释。t到该列表,并将其传递给某个方法(命名为Processor)进行处理只有在列表中的装饰对象上,否则我应该调用methodA。我怎么做?你只能在这些对象上调用TableA的方法。你可以做的是在TableA中有一些方法。让有一个默认的实现,它可能什么都不做。你重写TableX中的方法,然后调用methodX。与你一起提出建议有点困难但是,我不知道这些类和方法的作用是什么。在这种情况下,Decorator和Adapter之间有什么区别吗?我似乎不知道有什么区别,尽管我觉得这两种模式的意图是不同的……你是对的,有一条很细的线。我认为limckmy寻找
Decorator
的原因是这样的吗行
公共类TableX扩展了TableA{ /代码>所以他/她正在寻找包裹对象并保持相同的接口。在适配器的情况下,你会给包裹对象提供一个新的接口。好捕捉Sameer!我确信适配器也是答案,直到你指出这一点。SAMEL:我有一个解释。t到该列表,并将其传递给某个方法(命名为Processor)进行处理只有在列表中的装饰对象上,否则我应该调用methodA。我怎么做?你只能在这些对象上调用TableA的方法。你可以做的是在TableA中有一些方法。让有一个默认的实现,它可能什么都不做。你重写TableX中的方法,然后调用methodX。与你一起提出建议有点困难然而,我不知道这些类和方法要做什么。