1. 程式人生 > >觀察者模式學習和思考

觀察者模式學習和思考

1.概念

觀察者模式(又被稱為釋出-訂閱(Publish/Subscribe)模式,屬於行為型模式的一種,它定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態變化時,會通知所有的觀察者物件,使他們能夠自動更新自己。

2.理解

觀察者模式定義了一種一對多的關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己或幹一件事。按照常規思路,作為監聽者會主動用迴圈不停獲取被監聽物件的狀態,效率低,如果有多個監聽者,效率會更低。於是,反其道而行之,讓被監聽者主動去告知監聽者,監聽者反而變成了被動,被監聽者維護監聽者列表,實現動態新增刪除監聽者。當然為了可擴充套件性,要用介面(java/c#)或者虛基類(c++)實現。OO原則還是要遵守的。

相關推薦

觀察模式學習思考

1.概念 觀察者模式(又被稱為釋出-訂閱(Publish/Subscribe)模式,屬於行為型模式的一種,它定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態變化時

Ruby設計模式-觀察模式學習筆記

nco utf-8 upd attr ttr rim chan utf ade observer.rb #!/bin/env ruby # encoding: utf-8 require ‘observer‘ class CriminalMovement incl

觀察模式發布/訂閱模式的區別

observe nbsp 初步 有時 觀察 觀察者 發生 狀態 發現 在事件總線(EventBus)的架構設計中,用到了發布/訂閱模式,但發現和觀察者模式挺接近,有時容易發生混淆,現試圖分清一下他們的關系。 觀察者模式的角色為觀察者(observer)

使用util包裏自帶的接口類實現觀察模式

註意 簡化 響應 cat pan hang sys ext main 之前的關於觀察者模式的文章,是用自己寫的Observable接口和Observer接口,然後進行實現。其實官方的util包下自帶有實現觀察者模式對應的接口和類,可以簡化我們的代碼結構。 比如我們可

設計模式學習(二)“觀察模式” (C#)

original pan 學習筆記 pri 接口 program date contain 兩個 《深入淺出設計模式》學習筆記第二章 需求: 開發一套氣象監測應用,如圖: 氣象站,目前有三種裝置,溫度、濕度和氣壓感應裝置。 WeatherData對象追蹤氣象站的數據,並更

設計模式學習(二): 觀察模式 (C#)

模式 album 預報 其中 需求 學習 應用 bsp 要求 《深入淺出設計模式》學習筆記第二章 需求: 開發一套氣象監測應用,如圖: 氣象站,目前有三種裝置,溫度、濕度和氣壓感應裝置。 WeatherData對象追蹤氣象站的數據,並更新到布告板,布告板(目前是三個:目前狀

PHP 觀察模式php實現 Observer Pattern

BE pattern 修改 private ray 擴展 UNC array type 觀察者模式:  觀察者模式(Observer Pattern):定義對象間的一種一對多依賴關系,使得每當一個對象狀態發生改變時,其相關依賴對象皆得到通知並被自動更新。觀察者模式又叫做發布

觀察模式發布訂閱模式(上)

nts 針對 處理 nds script 分享圖片 .data cto 這樣的 觀察者模式 定義:觀察者模式(Observer Pattern):定義對象間的一種一對多依賴關系,使得每當一個對象狀態發生改變時,其相關依賴對象皆得到通知並被自動更新。 其中有兩個定義需要明確,

VUE學習之--觀察模式

prop 江湖 雷鳴 天下 功夫 auth 技術 同時 也有 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { font: 12.0

中介模式觀察模式區別?

observer server serve 有一個 obs 交互 進行 強調 一個 中介者(mediator)強調的是同事(colleague)類之間的交互 而觀察者(observer)中的目標類(subject)強調是目標改變後對觀察者進行統一的通訊 兩者非常相同的一點就

微信訂閱號的關註消息推送中的觀察模式

obs 取消 account bstr ans 定義 bubuko ros 17.     觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象,主體對象的狀態變化會通知所有觀察者對象。觀察者模式又叫做發布-訂閱模式、模型-視圖模式、源-監聽器模式

vue原始碼學習——觀察模式

情景:接觸過vue的同學都知道,我們曾經都很好奇為什麼vue能這麼方便的進行資料處理,當一個物件的某個狀態改變之後,只要依賴這個資料顯示的部分也會發生改變,如果你依舊很好奇,那麼今天你就可以瞭解一下實現的原理 什麼是觀察者模式​​​​​​​    官方解釋是

javac++觀察模式實現

觀察者模式是一種比較常用的設計模式,,採用介面,封裝類中動態變化的方法,定義物件間的依賴關係,一邊但一個物件狀態發生改變時,所有以來他的物件都發生改變。 簡單的說,就是一管多,即關鍵就是觀察者和被觀察者,學習這一部分看其他部落格這樣解釋,就是多個屌絲追一個白富美的模式,多個屌絲就是所謂的觀察

Unity之C#——委託與事件,觀察模式,貓老鼠事例

委託與事件,觀察者模式,貓和老鼠事例     在Unity遊戲開發中,我們經常需要在一個類中,呼叫另一個類中的方法,比如,當玩家進入到某個地方,敵人就開始攻擊玩家。這時就需要利用委託與事件,設計觀察者模式。 此處我們利用貓和老鼠來簡單描述: 程式碼如下: Ca

觀察模式事件監聽模式的區別

監聽機制 其他 不包含 機制 監聽 多態 場景 觀察者模式 特定 事件監聽模式更像是觀察者模式的進階。 觀察者模式中,‘主題’會在特定邏輯下通知所有‘觀察者’。如果這個通知不包含任何信息,那麽這種實現就是通常的觀察者模式。 如果‘主題’通知‘觀察者’的過程帶有一些<其

設計模式學習筆記-觀察模式

連結:http://www.cnblogs.com/wangjq/archive/2012/07/12/2587966.html 1. 概述   有時被稱作釋出/訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態發生變化時,會通知

Android設計模式學習觀察模式

蒐集的資料: http://blog.csdn.net/banketree/article/details/24985607  Android 設計模式 http://mobile.51cto.com/ahot-418968.htm  Android進階之大話設

cocos中的觀察模式 以及"點選事件"的註冊分發(個人理解)

一、控制元件的點選事件註冊與完成 在學習cocos引擎時,感覺觸控事件用的比較頻繁。 於是對各種觸控事件做一些小小的總結: cocos中的控制元件(按鈕,精靈,各種容器等)。在實際開發中發現他們都是可以新增點選事件的,可以通過設定setTouchEnabled()來開啟點

設計模式學習(三) 觀察模式

引入 定義:定義了物件之間的一對多依賴,這樣一來,當一個物件改變狀態時,他的所有依賴都會收到通知並自動更新。 認識觀察者模式 例子:報紙和雜誌的訂閱 1.報社的業務就是出版報紙 2.向某家報社訂閱報紙,只要有新的報紙出版,就會一直為你送報紙 3.當你取消了訂閱後,

Java設計模式學習記錄-觀察模式

前言 觀察者模式也是物件行為模式的一種,又叫做發表-訂閱(Publish/Subscribe)模式、模型-檢視(Model/View)模式、 咱們目前用的最多的就是各種MQ(Message Queue)都是基於這個模式的思想來實現的,生產者產生資料放到一個佇列中,消費者觀察生產者的訊息佇列的變化,從而接收訊