JS设计模式之策略模式
策略模式是诸多设计模式中最常用且实用的一个,得益于JavaScript 灵活的特性使得策略模式应用起来非常的好用方便。策略模式是什么就不多说了,我们来看个比较常见的需求来体会一下。
需求:
根据用户不同身份显示相应的值,假设有身份如下:
- 学生
- 教师
- 家长
- 主任
- 校长
需要根据身份给一个变量赋值,值为:我是[ 身份 ]
通过以上需求我们可以采用最简单直接的方法,用 if
判断。
if
判断实现版本
// 假设用户身份为 校长
const userIdentify = '校长'
let result = ''
if (currentIdentity === '学生') {
result = '我是学生'
}
if (currentIdentity === '教师') {
result = '我是教师'
}
if (currentIdentity === '家长') {
result = '我是家长'
}
if (currentIdentity === '主任') {
result = '我是主任'
}
if (currentIdentity === '校长') {
result = '我是校长'
}
需求的确是已经实现了,但感觉不是很优雅。那么我们使用 策略模式 对其进行优化一下。
- 策略模式实现版本
// 假设用户身份为 校长
const userIdentify = '校长'
const identityMap = {
'学生': '我是学生',
'教师': '我是教师',
'家长': '我是家长',
'主任': '我是主任',
'校长': '我是校长'
}
const result = identityMap[currentIdentity]
对比以上两种不同的实现方式,貌似利用策略模式实现的版本的确是要优雅一点,甚至连 if
判断都省掉了。如果把身份对象map里面的value值换成对象或者function的形式,那么代码的扩展性又会得到进一步的提升。作为一个优秀的 CV工程师当然也要提升一下内功心法 ,下次再遇到这种需求肯定首选策略模式。
总结
示例就不写啦😄 都差不多的。大家可以根据这个思想灵活应用到项目中,不管是开发、造轮子、还是代码优化,在适合场景下策略模式比较的有优势。