亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Javascript設(shè)計(jì)模式學(xué)習(xí)之Observer(觀察者)模式

DevWiki / 2224人閱讀

摘要:一個(gè)對(duì)象維持一系列依賴于它觀察者的對(duì)象,將有關(guān)狀態(tài)的任何變更自動(dòng)通知給它們。觀察者模式的實(shí)現(xiàn)模擬擁有的一系列依賴使用擴(kuò)展對(duì)象模擬目標(biāo)和在觀察者列表上添加刪除或通知觀察者

一個(gè)對(duì)象(subject)維持一系列依賴于它(觀察者)的對(duì)象,將有關(guān)狀態(tài)的任何變更自動(dòng)通知給它們。

當(dāng)一個(gè)目標(biāo)需要告訴觀察者發(fā)生了什么有趣的事情,它會(huì)向觀察者廣播一個(gè)通知

當(dāng)我們不再希望某個(gè)特定的觀察者獲取其注冊(cè)目標(biāo)發(fā)出的改變通知時(shí),該目標(biāo)可以將它從觀察者列表中刪除。

Observer(觀察者)模式列表組件

Subject(目標(biāo)): 維護(hù)一系列觀察者,方便添加或刪除觀察者

Observer(觀察者): 為那些在目標(biāo)狀態(tài)發(fā)生改變時(shí)需獲得通知的對(duì)象提供一個(gè)更新接口

ConcreteSubject(具體目標(biāo)):狀態(tài)發(fā)生改變時(shí),向Observer發(fā)出通知,存儲(chǔ)ConcreteObserver的狀態(tài)

ConcreteObserver(具體觀察者):存儲(chǔ)一個(gè)指向ConcreteSubject的更新接口,實(shí)現(xiàn)Observer的更新接口,以使自身狀態(tài)與目標(biāo)的狀態(tài)保持一致。

1. 觀察者模式的實(shí)現(xiàn)

1.1 模擬擁有的一系列依賴Observer

function ObserverList(){
   this.observerList = [];
}
ObserverList.prototype.Add = function(obj){
   return this.observerList.push(obj);
};
ObserverList.prototype.Remove = function(obj){
   return this.observerList.pop(obj);
};
ObserverList.prototype.Empty = function(){
   this.observerList = [];
};
ObserverList.prototype.Count = function(){
   return this.observerList.length;
};
ObserverList.prototype.Get = function(index){
   if(index > -1 && index < this.observerList.length){
      return this.observerList[index];
   }
};
ObserverList.prototype.Insert = function(obj,index){
   var pointer = -1;
   if(index === 0){
      this.observerList.unshift(obj);
      pointer = index;
   }else if(index === this.observerList.length){
      this.observerList.push(obj);
      pointer = index;
   }
   return pointer;
};
ObserverList.prototype.IndexOf = function(obj,startIndex){
   var i = startIndex,
       pointer = -1;
   while(i < this.observerList.length){
       if(this.observerList[i] === obj){
          pointer = i;
       }
       i++;
   }
   return pointer;
};
ObserverList.prototype.RemoveIndexAt = function(index){
   if(index === 0){
     this.observerList.shift();
   }else if(index === this.observerList.length - 1){
     this.observerList.pop();
   }
};
//使用extension擴(kuò)展對(duì)象
function extend(obj,extension){
   for(var key in obj){
       extension[key] = obj[key];
   }
};
var liuyidi = {};
var observer = new ObserverList();
extend(observer,liuyidi);
console.log(liuyidi);

1.2 模擬目標(biāo)(Subject)和在觀察者列表上添加、刪除或通知觀察者

function Subject(){
   this.observers = new ObserverList();
}

Subject.prototype.AddObserver = function(observer){
   this.observers.Add(observer);
};

Subject.prototype.RemoveObserver = function(observer){
   this.observers.RemoveIndexAt(this.observers.IndexOf(observer,0));
};

Subject.prototype.Notify = function(context){
   var observerCount = this.observers.Count();
   for(var i = 0; i < observerCount; i++){
      this.observers.Get(i).Update(context);
   }
};

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/78880.html

相關(guān)文章

  • 忘了再看設(shè)計(jì)模式-行為型

    摘要:推文用設(shè)計(jì)模式解構(gòu)三國(guó)是一種什么體驗(yàn)行為型設(shè)計(jì)模式一策略模式工廠模式優(yōu)化結(jié)構(gòu)狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機(jī)與狀態(tài)模式責(zé)任鏈模式多個(gè)對(duì)象依次處理請(qǐng)求前者指定后者。代理模式代理針對(duì)一個(gè)對(duì)象,為了增加控制等中介雙方都是多個(gè),為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現(xiàn)金[Concrete Stra...

    ShevaKuilin 評(píng)論0 收藏0
  • vue源碼學(xué)習(xí)之簡(jiǎn)單的數(shù)據(jù)監(jiān)聽(tīng)

    摘要:先實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)劫持。思路遍歷對(duì)象的每個(gè)屬性,為每個(gè)屬性掛上監(jiān)聽(tīng)函數(shù)即利用進(jìn)行元編程考慮屬性的子屬性的監(jiān)聽(tīng)先上代碼你訪問(wèn)了你設(shè)置了新的其中涉及的知識(shí)點(diǎn)如果屬性值還是對(duì)象,則遞歸繼續(xù) 先實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)劫持。思路: 遍歷對(duì)象的每個(gè)屬性,為每個(gè)屬性掛上監(jiān)聽(tīng)函數(shù)(即利用Object.defineProperty進(jìn)行元編程); 考慮屬性的子屬性的監(jiān)聽(tīng);先上代碼: function ...

    zone 評(píng)論0 收藏0
  • 一起學(xué)設(shè)計(jì)模式 - 察者模式

    摘要:觀察者模式是一種使用頻率非常高的設(shè)計(jì)模式,無(wú)論是移動(dòng)應(yīng)用應(yīng)用或者桌面應(yīng)用,觀察者模式幾乎無(wú)處不在,它為實(shí)現(xiàn)對(duì)象之間的聯(lián)動(dòng)提供了一套完整的解決方案,凡是涉及到一對(duì)一或者一對(duì)多的對(duì)象交互場(chǎng)景都可以使用觀察者模式。 觀察者模式(Observer Pattern)屬于對(duì)象行為型模式的一種,定義對(duì)象之間的一種一對(duì)多依賴關(guān)系,使得每當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴對(duì)象皆得到通知并被自動(dòng)更新。 ...

    cpupro 評(píng)論0 收藏0
  • Javascript設(shè)計(jì)模式學(xué)習(xí)之Decorator(裝飾者)模式

    摘要:抽象模式使用的裝飾者模式允許我們?cè)谶\(yùn)行時(shí)或者在隨后一個(gè)點(diǎn)上動(dòng)態(tài)地將兩個(gè)或兩個(gè)以上的對(duì)象和它們的屬性一起擴(kuò)展或合并為一個(gè)單一對(duì)象。定義三個(gè)對(duì)象目的是為了裝飾對(duì)象將的額外功能附加到上。 抽象decorator模式 使用jQuery的裝飾者模式 jQuery.extend()允許我們?cè)谶\(yùn)行時(shí)或者在隨后一個(gè)點(diǎn)上動(dòng)態(tài)地將兩個(gè)或兩個(gè)以上的對(duì)象(和它們的屬性)一起擴(kuò)展(或合并)為一個(gè)單一對(duì)象。 定義...

    Joyven 評(píng)論0 收藏0
  • Javascript設(shè)計(jì)模式學(xué)習(xí)之Module(模塊)模式

    摘要:實(shí)現(xiàn)模塊的幾種方法對(duì)象字面量表示法模式模式模式模塊對(duì)象字面量對(duì)象字面量型完整版配置對(duì)象基本方法根據(jù)配置信息輸出內(nèi)容重寫(xiě)當(dāng)前的配置信息輸出結(jié)果值模式最初被定義為一種在傳統(tǒng)軟件工程中為類提供私有和公有封裝的方法。該模式返回一個(gè)對(duì)象。 javascript實(shí)現(xiàn)模塊的幾種方法: 對(duì)象字面量表示法 Module模式 AMD模式 CommonJS模式 ECMAScript Harmony模塊 ...

    付永剛 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<