美文网首页
使用策略模式替代switch语句,提高代码复用性

使用策略模式替代switch语句,提高代码复用性

作者: 自律财富自由 | 来源:发表于2018-10-09 16:33 被阅读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
                        }
                    })
                },
    

    相关文章

      网友评论

          本文标题:使用策略模式替代switch语句,提高代码复用性

          本文链接:https://www.haomeiwen.com/subject/hthyaftx.html