使用策略模式替代switch语句,提高代码复用性
2018-10-09 本文已影响0人
自律财富自由
有以下情况,根据关键词进行跳转不同的链接。
我们首先想到的就是一下switch写法:
toChannelPage (k) {
switch (k) {
case '国内游':
window.location.href = 'https://m.youxiake.com/cn'
break
case '出境游':
window.location.href = 'https://m.youxiake.com/abroad'
break
case '周边游':
window.location.href = 'https://m.youxiake.com/around'
break
case '摄影游':
window.location.href = 'https://m.youxiake.com/photo'
break
case '户外游':
window.location.href = 'https://m.youxiake.com/huwai'
break
case '亲子游':
window.location.href = 'https://m.youxiake.com/qinzi'
break
case '当地玩乐':
window.location.href = 'https://m.youxiake.com/free'
break
case '活动赛事':
window.location.href = 'https://m.youxiake.com/activity/race'
break
case '分享会':
window.location.href = window.location.origin + '/share/sharing'
break
case '同城会':
window.location.href = 'http://m.youxiake.local/new/channel/searchlist?source_id=205&nav_id=9&page_type=local'
break
}
},
这样写可读性较好,但是如果还有其他关键词的话,改动性相对来说较大。
策略模式,将每种情况进行数据组织,如果还有数据加入的话,只需要更改数据结构部分,逻辑部分不用更改。达到数据与业务逻辑分离。
setChannelData () {
let origin = window.location.origin
let pageObj = [
{
key: '国内游',
url: origin + '/cn'
},
{
key: '出境游',
url: origin + '/abroad'
},
{
key: '周边游',
url: origin + '/around'
},
{
key: '摄影游',
url: origin + '/photo'
},
{
key: '户外游',
url: origin + '/huwai'
},
{
key: '亲子游',
url: origin + '/qinzi'
},
{
key: '当地玩乐',
url: origin + '/free'
},
{
key: '活动赛事',
url: origin + '/activity/race'
},
{
key: '分享会',
url: origin + '/share/sharing'
},
{
key: '同城会',
url: origin + '/new/channel/searchlist?source_id=205&nav_id=9&page_type=local'
}
]
return pageObj
},
toChannelPage (k) {
let pageObj = this.setChannelData()
pageObj.forEach((item) => {
if (k == item.key) {
window.location.href = item.url
}
})
},