我们的遗留代码有很长的 if else 块代码,这些代码依赖于事件和对象类型
if(event == A && objectType == O1){
.....
}
else if (event == A && objectType == O2){
....
}
else if (....)
....
....
随着越来越多的条件引入,我正在考虑用每个条件的命令模式替换这个逻辑。但是所需的类数是(事件数)*(对象类型数)。有没有更简单的方法来重构这段代码?
我们的遗留代码有很长的 if else 块代码,这些代码依赖于事件和对象类型
if(event == A && objectType == O1){
.....
}
else if (event == A && objectType == O2){
....
}
else if (....)
....
....
随着越来越多的条件引入,我正在考虑用每个条件的命令模式替换这个逻辑。但是所需的类数是(事件数)*(对象类型数)。有没有更简单的方法来重构这段代码?
创建一个包含event
and的类objectType
,使其实现.equals()
and .hashCode()
。也为每个执行块创建一个通用类。
然后您将能够使用 aMap
并且简单的查找将返回执行所需的内容。
您可能正在寻找的模式通常称为双重调度或有时称为访客模式。http://en.wikipedia.org/wiki/Visitor_pattern
创建一组事件类和一组对象类型。创建接口
public interface VisitEvent {
public void visit(EventA eventA);
public void visit(EventB eventB);
// for each event class
}
在事件类中,您必须在对象类型类上调用访问模式。
public class EventA {
public void visit(ObjectTypeParent otp) {
otp.visit(this);
}
}
假设对象类型类继承自一个公共类
public abstract class ObjectTypeParent implements VisitEvent {
public void visit(EventA eventA) {
// default code here
}
// same for each event visit from VisitEvent
}
然后
public class ObjectType01 extends ObjectTypeParent {
public void visit(EventA eventA) {
// stuff you want done for this combination
}
// don't implement the ones that have common behavior
}