js设计模式:发布订阅模式

这篇具有很好参考价值的文章主要介绍了js设计模式:发布订阅模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作用:

也称之为消息队列模式,或者pubsub模式

发布者发布消息(也可以理解为调用某函数),订阅者会收到消息,并且发布者可以将一些参数传递给订阅者。

是一种常用的参数传递方法,经典的pubsub.js,vue2中的$bus等都是用的这种模式。

示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>发布订阅模式</title>
</head>

<body>
    <button  onClick='subYou_vue()'>订阅尤大的vue技术专栏</button>
    <button  onClick='subYou_vite()'>订阅尤大的vite技术专栏</button>
    <button  onClick='cancelSubYou_vite()'>取消订阅尤大的vite技术专栏</button>
    <hr>
    <button  onClick='pushVueBlog()'>尤大发vue技术贴</button>
    <button  onClick='pushViteBlog()'>尤大发vite技术贴</button>
    <script>
        const Youyuxi = {
            blogMsg: {},
            //添加了某条订阅内容及后续需要处理的操作
            addSuber: (msg, callBack) => {
                if (!Youyuxi.blogMsg[msg]) {
                    Youyuxi.blogMsg[msg] = []
                }
                Youyuxi.blogMsg[msg].push(callBack)
            },
            publishMsg: (msg, data) => {
                if (Youyuxi.blogMsg[msg]) {
                    Youyuxi.blogMsg[msg].forEach(item => {
                        item(msg, data)
                    })
                }
            },
            deleteSuber:(msg)=>{
                if(Youyuxi.blogMsg[msg]){
                    Youyuxi.blogMsg[msg] = null
                }
            }
        }

        const wjt = {
            getMsgHandler: (type, data) => {
                switch (type) {
                    case 'vueBlogs':
                        console.log('尤大发了一篇vue技术帖子,内容为' + data)
                        break
                    case 'viteBlogs':
                        console.log('尤大发了一篇vite技术帖子,内容为' + data)
                        break
                }
            },
            subYouyuxi: (title) => {
                Youyuxi.addSuber(title, wjt.getMsgHandler)
            },
            cancelViteBlog:(title)=>{
                Youyuxi.deleteSuber(title)
            }
        }

        //订阅尤大的vue技术栏
        const subYou_vue = () => {
            wjt.subYouyuxi('vueBlogs')
        }
        //订阅尤大的vite技术栏
        const subYou_vite = () => {
            wjt.subYouyuxi('viteBlogs')
        }
        //尤大发博客了
        const pushVueBlog = () => {
            Youyuxi.publishMsg('vueBlogs', '这是一篇vue3响应式原理的技术帖子')
        }
        const pushViteBlog = () => {
            Youyuxi.publishMsg('viteBlogs', '这是一篇vite构建原理的技术帖子')
        }
        const cancelSubYou_vite = ()=>{
               wjt.cancelViteBlog('viteBlogs')
        }
    </script>
</body>

</html>

js设计模式:发布订阅模式,js设计模式,设计模式文章来源地址https://www.toymoban.com/news/detail-826634.html

到了这里,关于js设计模式:发布订阅模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包