3 回答
TA贡献1793条经验 获得超6个赞
这是子类型多态性有帮助的典型方案。请执行下列操作
interface I {
void do();
}
class A implements I { void do() { doA() } ... }
class B implements I { void do() { doB() } ... }
class C implements I { void do() { doC() } ... }
然后,你可以简单的调用do()上this。
如果您不能随意更改A,B和C,则可以应用访问者模式来实现相同目的。
TA贡献1844条经验 获得超8个赞
如果绝对不能编写接口代码,则可以使用枚举作为中介:
public A() {
CLAZZ z = CLAZZ.valueOf(this.getClass().getSimpleName());
switch (z) {
case A:
doA();
break;
case B:
doB();
break;
case C:
doC();
break;
}
}
enum CLAZZ {
A,B,C;
}
TA贡献1851条经验 获得超3个赞
万一有人阅读,以防万一:
java中的最佳解决方案是:
public enum Action {
a{
void doAction(...){
// some code
}
},
b{
void doAction(...){
// some code
}
},
c{
void doAction(...){
// some code
}
};
abstract void doAction (...);
}
这种模式的巨大好处是:
您就像这样做(根本没有开关):
void someFunction ( Action action ) {
action.doAction(...);
}
如果添加名为“ d”的新动作,则必须实施doAction(...)方法
注意:此模式在Joshua's Bloch“有效Java(第2版)”中进行了描述
添加回答
举报