JavaScript学习之设计模式->观察者模式
2016-11-08 12:40
295 查看
观察者模式的对象分为以下几种:
观察者(抽象观察者,具体观察者)
主题(抽象主题,具体主题)(主题中有存放观察者的数组,发布消息的方法)
有时候,观察者模式也被称为订阅发布者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者监听某一个主题,主题的状态发生变化时,会通知订阅该主题的所有观察者。使观察者做出反应。
观察者(抽象观察者,具体观察者)
主题(抽象主题,具体主题)(主题中有存放观察者的数组,发布消息的方法)
有时候,观察者模式也被称为订阅发布者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者监听某一个主题,主题的状态发生变化时,会通知订阅该主题的所有观察者。使观察者做出反应。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>观察者模式</title> <script type=text/javascript charset=utf-8> var Publish = function(name){ this.name = name; this.subscribers = []; } Publish.prototype = { constructor:Publish, delivery:function(news){ var pub = this; this.subscribers.forEach(function(item){ //把新消息发送给订阅者 item.updateChange(pub.name,news); }); }, subscribe:function(subscriber){ var alreadyExists =this.subscribers.some(function(item){ return item == subscriber; }); if(!alreadyExists){ this.subscribers.push(subscriber); } return this; }, unsubscribe:function(subscriber){ this.subscribers = this.subscribers.filter(function(item){ return item !== subscriber; }) return this; } } //订阅者 var Subscriber = function(element){ this.element = element; } Subscriber.prototype = { constructor:Subscriber, updateChange:function(pub,news){ this.element.innerHTML = pub + "发布了:" + news; } } window.onload = function(){ var pub1 = document.getElementById("pub1");//发布者按钮 var pub2 = document.getElementById("pub2"); var pub3 = document.getElementById("pub3"); var pub11 = new Publish(pub1.value);//按钮绑定发布者类 var pub22 = new Publish(pub2.value); var pub33 = new Publish(pub3.value); pub1.onclick = function(){//将按钮绑定到发布者时间中 pub11.delivery(document.getElementById("text1").value);//按钮点击将消息发布出去 } pub2.onclick = function(){ pub22.delivery(document.getElementById("text2").value); } pub3.onclick = function(){ pub33.delivery(document.getElementById("text3").value); } var subs1 = new Subscriber(document.getElementById("sub1"));//声明订阅者 var subs2 = new Subscriber(document.getElementById("sub2")); var subs3 = new Subscriber(document.getElementById("sub3")); pub11.subscribe(subs1).subscribe(subs2).subscribe(subs3);//订阅 pub22.subscribe(subs1).subscribe(subs2);//订阅 pub33.subscribe(subs1);//订阅 pub11.unsubscribe(subs2); }; </script> </head> <body> <input id="pub1" type="button" value="第一报社" /><input id="text1" value="" /><br> <input id="pub2" type="button" value="第二报社" /><input id="text2" value="" /><br> <input id="pub3" type="button" value="第三报社" /><input id="text3" value="" /><br> <textarea id="sub1" rows="5" cols="30" ></textarea> <textarea id="sub2" rows="5" cols="30" ></textarea> <textarea id="sub3" rows="5" cols="30" ></textarea> </body> </html>
相关文章推荐
- JavaScript学习之设计模式->命令模式
- JavaScript学习记录——《学用 JavaScript 设计模式》学习笔记(3)观察者模式
- JavaScript学习之设计模式->责任链模式
- 设计模式学习_javascript_观察者模式
- Javascript 设计模式学习之四 Observer(观察者)模式
- JavaScript学习之设计模式->代理模式
- 学习JavaScript设计模式之观察者模式
- javascript设计模式学习之八_发布订阅(观察者)模式
- 学习JavaScript设计模式(链式调用)
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 【学习笔记javascript设计模式与开发实践(状态模式)----16】
- Javascript 设计模式学习之一 Constructor(构造器)模式
- Java设计模式知识学习-----观察者模式
- 设计模式学习之抽象工厂模式(二)<反射+配置文件>
- 设计模式学习--观察者模式
- 设计模式学习笔记-观察者模式
- 【学习笔记javascript设计模式与开发实践(发布--订阅模式)----8】
- 【学习笔记javascript设计模式与开发实践(模板方法模式)----11】
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)