js的观察者模式

            //声明主题对象
            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
            */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值