摘要:添加獲取長度獲取下標通知首先我們聲明一個主體類,里面包含一個觀察者數組,還有一些操作方法。觀察者通用聲明一個更新接口,用來獲取主體分發的通知。主體分發消息給觀察者。
觀察者模式
The Observer is a design pattern where an object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state.
觀察者是一種 包含一系列依賴于主體(subject)的觀察者(observers),自動通知它們變化的內容的設計模式
接下來,用oberver pattern來實現一個購物車列表,實現之前先說明幾個概念:
主體 (Subject)
維護一系列觀察者的數組,包含一些操作方法,比如增加、刪除,獲取等等。
class Subject { constructor() { this.observerList = []; } add(item) { //添加 return this.observerList.push(item); } count() { //獲取長度 return this.observerList.length; } get(index) { //獲取下標 if (index > -1 && index < this.observerList.length) { return this.observerList[index]; } else { return null; } } notify(context) { //通知 let observerCount = this.count(); for (let i = 0; i < observerCount; i++) { console.dir(this.get(i)) this.get(i).update(context); } } }
首先我們聲明一個主體類,里面包含一個觀察者數組,還有一些操作方法。
觀察者(Observer)
class Observer { constructor() { this.update = () => { //通用interface //todo } } }
聲明一個更新接口,用來獲取主體分發的通知。
兩者關系大概如下:
主要流程:
定義好主體類和觀察者類
類實例化成具體對象,綁定方法,觀察者在主體對象里注冊
操作。主體分發消息給觀察者。
具體實現代碼如下:
Document name: price:
name | price | action |
---|
The Publish/Subscribe pattern however uses a topic/event channel which sits between the objects wishing to receive notifications (subscribers) and the object firing the event (the publisher). This event system allows code to define application specific events which can pass custom arguments containing values needed by the subscriber. The idea here is to avoid dependencies between the subscriber and publisher.
Publish/Subscribe pattern和Observer pattern和類似,都是Observer注冊,subject分布通知,但是Publish/Subscribe pattern多了個事件管道(event channel)用來集中處理監聽的事件
典型的Publish/Subscribe模式的實現代碼:
var pubsub = {}; (function(myObject) { // Storage for topics that can be broadcast // or listened to var topics = {}; // An topic identifier var subUid = -1; // Publish or broadcast events of interest // with a specific topic name and arguments // such as the data to pass along myObject.publish = function(topic, args) { if (!topics[topic]) { return false; } var subscribers = topics[topic], len = subscribers ? subscribers.length : 0; while (len--) { subscribers[len].func(topic, args); } return this; }; // Subscribe to events of interest // with a specific topic name and a // callback function, to be executed // when the topic/event is observed myObject.subscribe = function(topic, func) { if (!topics[topic]) { topics[topic] = []; } var token = (++subUid).toString(); topics[topic].push({ token: token, func: func }); return token; }; // Unsubscribe from a specific // topic, based on a tokenized reference // to the subscription myObject.unsubscribe = function(token) { for (var m in topics) { if (topics[m]) { for (var i = 0, j = topics[m].length; i < j; i++) { if (topics[m][i].token === token) { topics[m].splice(i, 1); return token; } } } } return this; }; }(pubsub));
test demo:
//注冊事件 var test = pubsub.subscribe("message", function(topic, data) { console.log("topic:" + topic + ",data:" + data); }); //分布消息 pubsub.publish("message", "siip"); //topic:message,data:test,a,b,c pubsub.publish("message", ["test", "a", "b", "c"]); //topic:message,data:test,a,b,c //刪除注冊事件 pubsub.unsubscribe(test); pubsub.publish("message", { sender: "hello@google.com", body: "Hey again!" });
兩者關系大概如下:
參考:
1、https://addyosmani.com/resour...
2、http://blog.csdn.net/cooldrag...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93156.html
摘要:觀察者模式定義設計模式中對的定義一個對象稱為維持一系列依賴于它觀察者的對象,將有關狀態的任何變更自動通知給它們。如圖模式比較觀察者模式則多了一個類似于話題調度中心的流程,發布者和訂閱者解耦。 Obeserver(觀察者)模式 定義 《js設計模式》中對Observer的定義:一個對象(稱為subject)維持一系列依賴于它(觀察者)的對象,將有關狀態的任何變更自動通知給它們。 《設計模...
摘要:設計模式與開發實踐讀書筆記。發布訂閱模式又叫觀察者模式,它定義了對象之間的一種一對多的依賴關系。附設計模式之發布訂閱模式觀察者模式數據結構和算法系列棧隊列優先隊列循環隊列設計模式系列設計模式之策略模式 《JavaScript設計模式與開發實踐》讀書筆記。 發布-訂閱模式又叫觀察者模式,它定義了對象之間的一種一對多的依賴關系。當一個對象的狀態發生改變時,所有依賴它的對象都將得到通知。 例...
摘要:設計模式與開發實踐讀書筆記。看此文章前,建議先看設計模式之發布訂閱模式觀察者模式在中,已經介紹了什么是發布訂閱模式,同時,也實現了發布訂閱模式。 《JavaScript設計模式與開發實踐》讀書筆記。 看此文章前,建議先看JavaScript設計模式之發布-訂閱模式(觀察者模式)-Part1 在Part1中,已經介紹了什么是發布-訂閱模式,同時,也實現了發布-訂閱模式。但是,就Part1...
摘要:設計模式與開發實踐讀書筆記。看此文章前,建議先看設計模式之發布訂閱模式觀察者模式在中,已經介紹了什么是發布訂閱模式,同時,也實現了發布訂閱模式。 《JavaScript設計模式與開發實踐》讀書筆記。 看此文章前,建議先看JavaScript設計模式之發布-訂閱模式(觀察者模式)-Part1 在Part1中,已經介紹了什么是發布-訂閱模式,同時,也實現了發布-訂閱模式。但是,就Part1...
閱讀 1075·2021-11-23 09:51
閱讀 2418·2021-09-29 09:34
閱讀 3158·2019-08-30 14:20
閱讀 1060·2019-08-29 14:14
閱讀 3188·2019-08-29 13:46
閱讀 1084·2019-08-26 13:54
閱讀 1641·2019-08-26 13:32
閱讀 1434·2019-08-26 12:23