if else 優化之策略模式
if else 太多,嵌套太深,已然成爲我們搬磚路上經常遇到的問題。最近在項目上使用策略模式,有助於優化嵌套的代碼,使結構更加清晰。
策略模型
什麼是策略模式?
定義:通過定義了一系列的算法,並將每一個算法封裝起來,使每個算法可以相互替代,使算法本身和使用算法的客戶端分割開來,相互獨立。
什麼意思,實際上就是把 if 分支用函數封裝成一個個代碼塊,對方法行爲進行抽象,而不關注每個代碼塊的細節,這就可以算是一個簡單的策略模式。
例子
根據請求返回碼做出不同操作
//if else版
if(res){
if(res.returnCode == '0'){
do something 0
}else if(res.returnCode == '001'){
do something 001
}else if(res.returnCode == '010'){
do something 010
}else if(res.returnCode == '100'){
do something 010
}else{
do something else2
}
}else{
do something else1
}
如果分支越來越多,代碼會很難看並且邏輯也不清晰
//策略模式
if(!res){
do something else1
return true;
}
var action = {
'0': function(){ do something 0 },
'001': function(){ do something 001 },
'010': function(){ do something 010 },
'100': function(){ do something 100 }
};
action[res.returnCode] ? action[res.returnCode]() : (do something else2);
先分層,把類似於判斷空這樣的代碼分離出來;然後把所有行爲抽象出來變成一個個代碼塊,代碼結構一目瞭然,後續修改也只需要修改 action 對象即可。
總結
沒有過多的展開講策略模型,設計模式本質上都是爲了解決某個場景,所以這裏只是引入一個核心思想。通過對方法行爲進行抽象的思想,可以減少 if else 的嵌套,易於擴展。每個人根據不同的場景,代碼的顆粒度,可以有選擇地使用。