十一闲来无事到公司改了段代码,大家看看这个修改适合不。首先放出修改前的原始的代码(经过简化,改了名字,名字随便改的),逻辑很简单,就是前端传一个参数进来,后台根据参数的不同进行不同的逻辑处理。
修改后:
修改后通过使用枚举类型间接地去掉了if.
我觉得修改之后有以下特点:
优点:1.execute方法的代码更简洁并且减少重复代码
2.如果要增加新的处理流程只需要在枚举类中增加一个参数类型即可,不用修改execute方法
但是我有个问题:不清楚这样写是否会带来其他问题。例如性能问题和内存问题。
public class HandleSomething {
private Manager manager;
private Logger subLogger = LoggerFactory.getLogger(this.getClass());
/**
* entryType ,进入的参数,根据该参数来判断逻辑。
*
*/
public static final int VIP_ENTRY_FLOW = 1; // 特殊页面进入
public static final int INDEX_ENTRY_FLOW = 2; // 首页进入
public static final int OTHERS_ENTRY_FLOW = 3; // 其他页面进来
protected void work( int entryType, long userId,Context context) {
if (entryType == VIP_ENTRY_FLOW) {
context.put("type", vipFlow(userId,context));
return;
}
if (entryType == INDEX_ENTRY_FLOW) {
context.put("type", indexFlow(userId, context));
return;
}
if (entryType == OTHERS_ENTRY_FLOW) {
context.put("type", othersFlow(userId,context));
}
}
private int vipFlow(long userId, TemplateContext context) {/*这里的逻辑用到manager和subLogger*/}
private int indexFlow(long userId, TemplateContext context) {/*这里的逻辑用到manager和subLogger*/}
private int othersFlow(long userId, TemplateContext context) {/*这里的逻辑用到manager和subLogger*/}
}
修改后:
public class HandleSomething {
private static Manager manager;
private static Logger subLogger = LoggerFactory.getLogger(HandleSomething.class);
protected void work( int entryType, long userId,Context context) {
for (Flow flow : Flow.values()) {
if (flow.getTag() == entryType) {
context.put("type", flow.handle(userId, context));
break;
}
}
}
enum Flow{
VIP_ENTRY_FLOW(1) {// 特殊页面进入
@Override
int handle(long userId, TemplateContext context) {
/*这里的逻辑用到manager和subLogger*/
},
TAOJINBI_ENTRY_FLOW(2) {// 首页进入
@Override
int handle(long userId, TemplateContext context) {
/*这里的逻辑用到manager和subLogger*/
},
ADD_TAOJINBI(3){ // 其他页面进来
@Override
int handle(long userId, TemplateContext context) {
/*这里的逻辑用到manager和subLogger*/
}
};
private final int tag;
Flow(Integer tag){
this.tag=tag;
}
public int getTag() {
return tag;
}
public abstract int handle(long userId, Context context);
}
}
修改后通过使用枚举类型间接地去掉了if.
我觉得修改之后有以下特点:
优点:1.execute方法的代码更简洁并且减少重复代码
2.如果要增加新的处理流程只需要在枚举类中增加一个参数类型即可,不用修改execute方法
但是我有个问题:不清楚这样写是否会带来其他问题。例如性能问题和内存问题。