//声明主题对象
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
*/
js的观察者模式
最新推荐文章于 2023-02-03 15:57:30 发布