使用策略模式替代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
                    }
                })
            },
上一篇下一篇

猜你喜欢

热点阅读