if else的优化

对于同一级的大量的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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值