博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js的观察者模式
阅读量:7038 次
发布时间:2019-06-28

本文共 2379 字,大约阅读时间需要 7 分钟。

//声明主题对象            var Subject = function(name) {                this.name = name                this.register = []            }            Subject.prototype = {                //注册观察者                submit(observe) {                    this.register.push(observe)                    console.log('观察者' + observe.id + '订阅了本主题')                    return this                },                //观察者取关                unsubmit(observe) {                    var that = this                    this.register.map(function(name, index) {                        if (name == observe) {                            that.register.splice(index, 1)                            console.log(name.id + '取关了本主题')                        }                    })                    return this                },                //在某些特定的时候,由主题向所有的订阅者发布事件                radioOn(name, value) {                    this.register.map(rg => {                        rg[name](value)                    })                    return this                }            }                        var Observe = function(id) {                this.id = id            }            //供主题调用的事件            Observe.prototype = {                updata(msg) {                    console.log('观察者' + this.id + '更新了信息,信息为' + msg)                },                init() {                    console.log('观察者' + this.id + '进行了初始化')                },                play(type) {                    console.log('观察者' + this.id + '开始玩起了' + type)                }            }            //实例化一个主题            var subject1 = new Subject('PUBG')                        //实例化三个观察者对象            var observe1 = new Observe('张三')            var observe2 = new Observe('李四')            var observe3 = new Observe('赵六')                        subject1.submit(observe1)                    .submit(observe2)                    .radioOn('init')                    .radioOn('updata', '天命圈hhh')                    .unsubmit(observe1)                    .submit(observe3)                    .radioOn('play', subject1.name)            /*    观察者张三订阅了本主题            *     观察者李四订阅了本主题            *     观察者张三进行了初始化            *     观察者李四进行了初始化            *     观察者张三更新了信息,信息为天命圈hhh            *     观察者李四更新了信息,信息为天命圈hhh            *     张三取关了本主题            *     观察者赵六订阅了本主题            *     观察者李四开始玩起了PUBG            *     观察者赵六开始玩起了PUBG            */

转载地址:http://yrnal.baihongyu.com/

你可能感兴趣的文章
枚举在业务系统中的最佳使用方式
查看>>
css布局float浮动布局详解,工作半年后才知道的知识
查看>>
ECS开放批量创建实例接口RunInstances
查看>>
PyODPS 安装常见问题解决
查看>>
单网卡实现虚拟交换机trunk功能
查看>>
nginx日志定时切割
查看>>
VS2012使用技巧
查看>>
学习笔记-小甲鱼Python3学习第六讲:python之常用操作符
查看>>
高性能服务器——I/O多路转接的三种模式(select &poll& epoll)
查看>>
centos6.5编译redis3.0.3
查看>>
Docker 之 LNMPA(Nginx + PHP + Apache + MySQL) 环境
查看>>
安装httpd2.4
查看>>
JPA(五)之实体关系多对多
查看>>
Zookeeper学习笔记-zookeeper介绍
查看>>
mysql学习笔记(4-通用二进制格式安装MariaDB)
查看>>
Android APK 瘦身实践
查看>>
仿车轮社区图片切换效果
查看>>
执行计划的操作类型
查看>>
VTP配置实例
查看>>
heartbeat+nfs+apache(web)
查看>>