Java 我的场景使用哪种设计模式?
在运行时,可能会创建TableA、TableB或TableCJava 我的场景使用哪种设计模式?,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
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。与你一起提出建议有点困难然而,我不知道这些类和方法要做什么。