<div>
<p id="navtext">您还未登录</p>
</div>
<div>
<button id="logBtn">登录</button>
<button id="outBtn">退出登录</button>
</div>
<script>
// 观察者模式,就是发布订阅模式,比如举一个猫跟老鼠的故事:
// 背景介绍:Jerry(老鼠) 在偷吃奶酪 而 Tom(猫) 一直小心翼翼的准备抓住 Jerry
// 执行事件:Jerry感觉到了危险的到来准备就开始逃跑 (发布信息) , Tom 收到了 Jerry逃跑的信息 (订阅信息) ,Tom就开始追Jerry。
// 观察者对象
function Observer (){
// 创建一个储存信息的对象
let msgs = {};
// 创建一个订阅信息函数
this.subscribeInformation = function(type,fn){
if(typeof msgs[type] === "undefined"){
msgs[type] = [fn];
}else{
msgs[type].push(fn);
}
}
// 创建一个发布信息的函数
this.releaseInformation = function(type,data){
if(!msgs[type]) return;
let events = {
type : type,
data : data || {}
}
for(let i = 0; i < msgs[type].length; i++){
msgs[type][i].call(this,events);
}
}
// 删除订阅信息的函数
this.removeInformation = function(type,fn){
if(msgs[type] instanceof Array){
for(let i = 0; i < msgs[type].length; i++){
msgs[type][i] === fn && msgs[type].splice(i,1);
}
}
}
}
// 案例:
// 案例背景:
// 导航上有一条信息 '您还未登录'
// 俩个按钮 一个是 登录 按钮 一个是 退出登录按钮。当我们登录的时候,导航信息改为 '登录成功',退出登录后 改变原来信息
// 初始化变量
let logBtn = document.getElementById('logBtn');
let outBtn = document.getElementById('outBtn');
let navtext = document.getElementById('navtext');
// 实例化 观察者对象
var loginInfo = new Observer();
// 登录按钮 开始发布信息:
logBtn.onclick = function(){
loginInfo.releaseInformation('login',{
msg:"登录成功"
})
}
// 退出登录 开始发布信息
outBtn.onclick = function(){
loginInfo.releaseInformation('login',{
msg:"您还未登录"
})
}
// 导航信息要订阅 登录按钮的信息
loginInfo.subscribeInformation('login',function(e){
console.log(e.type,e.data);
navtext.innerHTML = e.data.msg;
})
</script>
观察者模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 中介者模式 在一些很多对象之间会存在一定的交互,例如像即时聊天软件中的语言视频通话,这种就有很多的界面变化、如呼入...
- 一.观察者模式,实现:通知和KVO 触发机制: 一个对象(观察者),观察另一个对象(被观察者)的某...
- php设计模式(4) 观察者模式(附加 不听话的观察者) 概述 代码实现 目标 和 观察者(使用了 php spl...
- 原生KVO的实现依赖于强大的runtime运行时机制,实现原理大致为:当观察某对象A的属性时,会动态的创建这...
- 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式 ...