目的
需求添加新条件,于是有了类似下面的代码:
if (Constant.BYTE_ONE.equals(params.getSpecialFlag())) { this.send1(openid, params); }else if (Constant.BYTE_TWO.equals(params.getSpecialFlag())){ this.send2(openid, params); }else if (Constant.BYTE_THREE.equals(params.getSpecialFlag())){ this.send3(openid, params); }else if (Constant.BYTE_FOUR.equals(params.getSpecialFlag())){ this.send4(openid, params); }else if (BYTE_FIVE.equals(params.getSpecialFlag())){ this.send5(openid, params); }else if (BYTE_SIX.equals(params.getSpecialFlag())){ this.send6(openid, params); }else { this.sendDefault(openid, params); }
以上代码肯定是不允许的,如果后期需求再次添加,还会添加很多else-if。
优化方案
1、枚举方式(本次采用)
2、策略-工厂模式
优化步骤:
一、编写枚举类:(公司代码已删减,以下伪代码,仅供参考)
public enum OperatorTest { ONE { public void apply(String openId, OpportunityMsgParams params) { // 调用的静态方法(业务方法) PT2WXMessageServiceImpl.send1(openId, params); } }, TWO { public void apply(String openId, OpportunityMsgParams params) { // 其他:如:两个值的 + - * /... // return a * b; } }; public abstract void apply(String openId, OpportunityMsgParams params); }
二、service层方法调用类:
public class Apply { public void apply(String openId, OpportunityMsgParams params, OperatorTest operatorTest) { operatorTest.apply(openId, params); } }