日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

01導(dǎo)讀

在項目中你有沒有遇到過這樣的代碼:(偽代碼如下)

     if(type==0){
            return "01";
        }else if(type==1){
            return "03";
        }else if(type==2){
            return "04";
        }else if(type==3){
          return "05"
        }
       //......

上面這種一大堆判斷,看著是不是很讓人頭皮發(fā)麻,如果某天需求還需要增加判斷是不是還得往下增加判斷條件,這種大量的if/else if/....../else寫在項目中估計代碼review時會被罵死。

為了使代碼看起來更加的簡潔以及擴展性更強,今天我們就改造一下這種代碼(其實這種大量的if/else if/else也有一點好處就是邏輯看著比較簡單易懂)。

02代碼改造(簡單的業(yè)務(wù))

如果只是上面這種簡單的根據(jù)條件進行判斷返回固定的值,我們可以利用map的特性來進行優(yōu)化(在map中一個key只會綁定一個指定的value)。所以根據(jù)這個特性我們把上面的代碼改造如下:

private static final HashMap<Integer,String> HASH_MAP =new HashMap<>();
static {
	HASH_MAP.put(0,"01");
	HASH_MAP.put(1,"03");
	HASH_MAP.put(2,"04");
	HASH_MAP.put(3,"05");
	//如果還有其他往后面加;
}

在需要返回值的地方直接使用HASH_MAP.get(type)就可以得到你想要的值了,這種方法是不是簡單明了也避免了使用大量的if/esle if/......

上面的這個key或者value值也可以用枚舉,這樣的話也便于后面使用時可以進行統(tǒng)一管理;

03代碼改造(復(fù)雜的業(yè)務(wù))

可能在有些業(yè)務(wù)場景下,不一定只是根據(jù)條件去返回固定的值,而是在判斷里面還要做一些其他的業(yè)務(wù)邏輯,偽代碼如下:

      if (type==0){
           doSomething();
            System.out.println("我是火影忍者鳴人:"+type);
        }else if (type==1){
          doSomething();
            System.out.println("我是火影忍者卡卡西"+type);
        }else if(type==2){
           doSomething();
            System.out.println("我是木葉三忍自來也"+type);
        }

像上面這種在條件判斷之后還需要做其他操作的業(yè)務(wù),顯然上面那種map的方式不能夠滿足了,這個時候我們可以使用策略+工廠的方法進行改造。

1:首先我們需要新建一個接口,如下:

public interface Handler extends InitializingBean {
    public void doSomething(Integer type);
}                                             

2:實現(xiàn)上面的接口把if條件里面的操作給抽取出來,這里我就寫一個實現(xiàn)類,剩下的大家可以直接復(fù)制就行,代碼如下:

@Component
public class HandlerImpl implements Handler{
    @Override
    public void doSomething(Integer type) {
        System.out.println("我是火影忍者鳴人:"+type);
    }
   //類初始化之后會執(zhí)行這個方法
    @Override
    public void afterPropertiesSet() throws Exception {
        Factory.putHandler(0,this);
    }
}

上面的Factory.putHandler(type,this)可能暫時看得有點懵逼,別著急往下繼續(xù)看。代碼在下面。

3:這個時候我們就可以新建一個工廠來把if/else if/....優(yōu)化掉,代碼如下:

public class Factory {
    //map里面存儲的是判斷條件以及對應(yīng)的Handle處理類;
     private static Map<Integer,Handler> HANDLER_MAP= new HashMap();
     //根據(jù)條件type得到對應(yīng)的handler;
     public static Handler getHandler(Integer type){
         return HANDLER_MAP.get(type);
     }
     public static void putHandler(Integer type,Handler handler){
         HANDLER_MAP.put(type,handler);
     }
}

4:到這里基本上快要改造完了,現(xiàn)在我們再回頭看把最上面的if業(yè)務(wù)改造,代碼如下:

    @Test
    public void typeDo(){
        Integer type=0;
        Handler handler = Factory.getHandler(type);
        handler.doSomething(type);
    }

運行結(jié)果也達到了預(yù)期的效果,如下圖01:

兩個方法干掉代碼中那些復(fù)雜的if-else

01

總結(jié)

上面我只是列了兩種怎么優(yōu)化大量的if/else if/...../else的方法,在實際項目中大家還是根據(jù)實際情況來處理使用,不要為了使用而使用!

作者:wangyuancun

微信公眾號:wangyuancun

原創(chuàng):02

分享到:
標簽:代碼
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定