当我们需要判断多种情况时常常会使用ifelse;但这种写法复用性差,缺乏弹性;
传统写法
function getLevel(level) {
if (level === '花泽香菜') {
console.log("黑猫");
} else if (level === '中原麻衣'){
console.log("茱比娅");
} else if (level === '三上枝织') {
console.log('阿卡林');
}
}
getLevel('三上枝织');
策略模式的定义就是定义一些算法,把他们它们封装起来,并且可以相互替换;
一个策略模式的实现至少包含两部分:
1.策略类,封装了具体的算法,负责具体计算过程。
2.环境类,接收客户的请求,将请求委托给某个策略类处理。
策略模式的优点:
1.利用组合和委托等思想,避免了大量的if语句;
2.策略模式提供了开发-封闭的原则,是代码更容易理解和扩展;
3.策略模式中的代码可以复用;
//策略模式
let obj = {
"花泽香菜": function(){console.log('黑猫')},
"中原麻衣": function(){console.log('茱比娅')},
"三上枝织": function(){console.log('阿卡林')},
}
function getLevels(level) {
obj[level]();
}
getLevels('中原麻衣');
外加一个小例子,大家可以看一下上一篇通过参数匹配相应内容
上一篇写的是通过过滤匹配到它的对应name值,然后就push进去
现在结合起来策略模式写一个
const clac={
'北京':function(){
return 'mlw_bj_20200630.png'
},
'重庆':function (){
return 'mlw_cq_20200630.png'
},
'合肥':function(){
return 'mlw_hf_20200630.png'
},
'西安':function(){
return 'mlw_xa_20200630.png'
}
}
function aaa(name){
return clac[name]()
}
console.log('http://xeme.oss-cn-shanghai.aliyuncs.com/iron/gongzhang/' + aaa(obj.company_name))//例如北京
//aaa函数里,应该传入的是获取到的值
//控制台打印出 http://xeme.oss-cn-shanghai.aliyuncs.com/iron/gongzhang/mlw_bj_20200630.png