javaScript的策略模式

当我们需要判断多种情况时常常会使用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

猜你喜欢

转载自blog.csdn.net/Sunshine_GirlXue/article/details/108507870