对于同一级的大量的if else逻辑的优化
有些业务,需要根据不同的type,执行不同的逻辑。第一反应会写成下面的大量的if else,同一级的if else。也就是每一个分支判断里面不会再有if else的判断了。
if (pageType.equals(Constant.PAGE_TYPE_SALE) && !pageValue.isEmpty()) {
// 跳转到售后订单
int id = Integer.parseInt(messageAllListModel.getMessage().getPage_value());
mActivity.startActivity(ReturnDetailDelegate.newInstance(mActivity, id));
mActivity.overridePendingTransition(R.anim.move_in, R.anim.move_out);
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
} else if (pageType.equals(Constant.PAGE_TYPE_ORDER) && !pageValue.isEmpty()) {
// 跳转到订单详情
int id = Integer.parseInt(messageAllListModel.getMessage().getPage_value());
ARouter.getInstance().build(ARouterConstant.Order.ORDER_DETAIL)
.withInt("id", id)
.navigation();
mActivity.overridePendingTransition(R.anim.move_in, R.anim.move_out);
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
} else if (pageType.equals(Constant.PAGE_TYPE_GOODS) && !pageValue.isEmpty()) {
// 跳转到商品详情
int id = Integer.parseInt(messageAllListModel.getMessage().getPage_value());
mActivity.startActivity(GoodDetailDelegate.newInstance(mActivity, id));
mActivity.overridePendingTransition(R.anim.move_in, R.anim.move_out);
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
} else if (pageType.equals(Constant.PAGE_TYPE_PROFIT)) {
// 跳店铺业绩
ARouter.getInstance().build(ARouterConstant.Mine.MINE_TEAM_PERFORM).navigation();
mActivity.overridePendingTransition(R.anim.move_in, R.anim.move_out);
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
} else if (pageType.equals(Constant.PAGE_TYPE_TEAM) && !pageValue.isEmpty()) {
// 跳我的团队页面
mActivity.startActivity(MineTeamDelegate2.newInstance(mActivity, 0)); // 以前的我的用户页面
// mContext.startActivity(MyTeamActivity.newInstance(mContext, 0)); // 新增的我的团队的页面
mActivity.overridePendingTransition(R.anim.move_in, R.anim.move_out);
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
} else if (pageType.equals(Constant.PAGE_TYPE_USER_LEVEL)) {
// 用户等级变化,跳转到我的页面
EventBus.getDefault().post(new MessageEvent<Boolean>(RxBusAction.SWITCH_TO_MINE, true));
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
} else if (pageType.equals(Constant.PAGE_TYPE_LIVELY_CHANGE)) {
// 活跃度变化
mActivity.startActivity(ShopLivelyActivity.newInstance(mActivity));
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
}else if(pageType.equals(Constant.PAGE_TYPE_LOW_LEVEL)){
// 用户的直属下级升级店主或卓越店主时需要推送一条系统通知
mActivity.startActivity(MineTeamDelegate2.newInstance(mActivity, 0));
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
}else if(pageType.equals(Constant.PAGE_TYPE_USER_SELF_LOW_LEVEL)){
EventBus.getDefault().post(new MessageEvent<Boolean>(RxBusAction.SWITCH_TO_MINE, true));
hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
}
使用策略模式+工厂模式优化同级别的if else
1.定义一个接口
public interface IMessageCenterJump {
void jump(BaseQuickAdapter adapter, int position, AppCompatActivity mActivity,
List<Call> mCalls);
}
2.原来的每一个分支逻辑 == 一个IMessageCenterJump的实现类
// 商品详情跳转实现类
public class GoodDetailJump implements IMessageCenterJump {
@Override
public void jump(BaseQuickAdapter adapter, int position, AppCompatActivity mActivity, List<Call> mCalls) {
MessageAllListModel messageAllListModel = (MessageAllListModel) adapter.getItem(position);
String pageValue = messageAllListModel.getMessage().getPage_value();
String pageType = messageAllListModel.getMessage().getPage_type();
// 跳转到商品详情
int id = Integer.parseInt(messageAllListModel.getMessage().getPage_value());
mActivity.startActivity(GoodDetailDelegate.newInstance(mActivity, id));
mActivity.overridePendingTransition(R.anim.move_in, R.anim.move_out);
// hadReadMsg(adapter, mActivity, mCalls, messageAllListModel);
}
}
3.用工厂生产原来的所有的分支逻辑,即是所有的实现类
public class MessageCenterJumpFactory {
private static final Map<String, IMessageCenterJump> map = new HashMap<>();
static {
map.put(Constant.PAGE_TYPE_ORDER, new OrderDetailJump());
map.put(Constant.PAGE_TYPE_GOODS, new GoodDetailJump());
map.put(Constant.PAGE_TYPE_SALE, new SaleOrderJump());
map.put(Constant.PAGE_TYPE_PROFIT, new ShopGradeJump());
map.put(Constant.PAGE_TYPE_TEAM, new MyTeamJump());
map.put(Constant.PAGE_TYPE_LIVELY_CHANGE, new SunShineJump());
map.put(Constant.PAGE_TYPE_USER_LEVEL, new UserLevelJump11());
map.put(Constant.PAGE_TYPE_LOW_LEVEL, new UserLevelJump12());
map.put(Constant.PAGE_TYPE_USER_SELF_LOW_LEVEL, new UserLevelJump13());
}
public static IMessageCenterJump getMessageJump(String type) {
return map.get(type);
}
}
4.调用方式
MessageAllListModel model = systemMessageAdapter.getItem(position);
IMessageCenterJump jump = MessageCenterJumpFactory.getMessageJump(model.getMessage().getPage_type());
jump.jump(systemMessageAdapter,position,_mActivity,mCalls);
MessageJumpHelper.hadReadMsg(systemMessageAdapter,_mActivity,mCalls,model);