js程序中最常用的if else循环,如果分枝很多的的情况下难免使写出的程序又臭又长,但是根据需求又必须将这些分支处理,此时稍有经验的程序员可能会想到用switch case优化但是只是仅仅做到利于阅读,最好的方法是用策略模式进行优化。
例如 有五个对象
obj1 = {
name:“obj1”,
option:{
do:“case1”
}
}
…
obj5 = {
name:“obj5”,
option:{
do:“case5”
}
}
然后需要判断每个对象的名称执行不同的操作 doSomething1()…doSomething5();
如果用if-else实现
function handle(obj){
if(obj.name == "obj1"){
doSomething1();
}else if(obj.name == "obj2"){
doSomething2();
}else if(obj.name == "obj3"){
doSomething3();
}else if(obj.name == "obj4"){
doSomething4();
}else if(obj.name == "obj5"){
doSomething5();
}
}
用switch case实现:
function handle(obj){
switch(obj.name) {
case "obj1":
doSomething1();
break;
case "obj2":
doSomething2();
break;
case "obj3":
doSomething3();
break;
case "obj4":
doSomething4();
break;
case "obj5":
doSomething5();
break;
default:
return;
}
}
用策略模式定义策略树实现:
策略树:
var stats ={
obj1:function(){
doSomething1();
},
obj2:function(){
doSomething2();
},
obj3:function(){
doSomething3();
},
obj4:function(){
doSomething4();
},
obj5:function(){
doSomething5();
}
}
调用:
function handle(obj){
stats[obj.name]();
}
以上例子为了便于说明可能不太恰当,但在实际开发中这种思想非常实用。