【发布时间】:2018-05-18 16:48:51
【问题描述】:
我有一个类 MethodClass 和类 Foo 和 Bar,它们都扩展了 FooBar。 MethodClass 有一个包含Foo 和Bar 对象的列表和一个方法doMethod(),它从这个列表中挑选两个随机元素并将它们传递给doMethod(FooBar fooBar1, FooBar fooBar2)。 doMethod(FooBar fooBar1, FooBar fooBar2) 的结果取决于给定参数的子类。
目前的结构:
类方法类:
List<Foobar> list;
void doMethod() {
FooBar obj1 = ...;
FooBar obj2 = ...;
doMethod(obj1,obj2);
void doMethod(FooBar fooBar1, FooBar fooBar2) {
//instance checking and downcasting
...
}
void doMethod(Foo foo1, Foo foo2) {
foo1.doA();
foo2.doA();
}
void doMethod(Foo foo, Bar bar) {
foo.doB();
bar.doB();
}
void doMethod(Bar bar1, Bar bar2) {
bar1.doA();
bar2.doA();
}
抽象类 FooBar:
public abstract class FooBar {
abstract void methodA() {...}
abstract void methodB() {...}
}
类Foo:
public class Foo extends FooBar {
void methodB() {...}
void methodB() {...}
}
类栏:
public class Foo extends FooBar {
void methodA() {...}
void methodB() {...}
}
以后我会进一步扩展FooBar(子类只有methodA和methodB)。在向FooBar 添加子类时,是否可以在不进行转换并且不需要更新多个类的情况下实现这一点?如果doMethod 只接受一个参数,这可以使用访问者模式的变体轻松完成,但我找不到将其扩展到两个参数的适当方法。
提前致谢。
【问题讨论】: