1. 程式人生 > >大話設計模式----觀察者模式

大話設計模式----觀察者模式

我覺得以我現在的水平,還不夠對這個模式瞭解的足夠深刻,雖然我知道這個模式是什麼了,但是可能理解上還有一些欠缺,建議大家看完這篇部落格還能再去搜一些資料來使自己對這個模式瞭解的更為深刻一些。

我們現在說說什麼是觀察者模式:

觀察者模式:觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使他們能夠自動的更新自己。

Subject類,可翻譯為主題或抽象通知者,一般用一個抽象類或者一個介面實現。它把所有對觀察者物件的引用儲存在一個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供一個介面,可以增加和刪除觀察者物件。

Observer類,抽象觀察者,為所有的具體觀察者定義一個介面,在得到主題的通知時更新自己。這個介面叫做更新介面。抽象觀察者一般用一個抽象類或者一個介面實現。更新介面通常包含一個Updata()方法,這個方法叫做更新方法。

ConcreteSubject類,叫做具體主題或者具體通知者,將有關狀態存入具體觀察者物件:在具體主題的內部狀態改變時,給所有登記過的觀察者發出通知。具體主題角色通常用一個具體子類實現。

ConCreteObserver類,具體觀察者,實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題的狀態相協調。具體觀察者角色可以儲存一個指向具體主題物件的引用。具體觀察者角色通常用一個具體子類實現。

觀察者模式的動機是什麼呢?

將一個系統分割成一系列相互協作的類有一個很不好的副作用,那就是需要維護相關物件間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴充套件和重用都帶來不便。而觀察者模式的關鍵物件是主題Subject和觀察者Observe,一個Subject可以有任意數目的依賴他的Observe,一旦Subject的狀態發生了改變,所有的Observe都可以得到通知。Subject發出通知時並不需要知道誰是他的觀察者,也就是說,具體觀察者是誰,他根本不需要知道。而任何一個具體觀察者不知道也不需要知道其他觀察者的存在。

那麼什麼時候使用觀察者模式呢?

應該是當一個物件的改變需要同時改變其他物件,而且不知道具體有多少物件需要改變的時候,應該考慮使用觀察者模式。

相關推薦

大話設計模式----觀察模式

我覺得以我現在的水平,還不夠對這個模式瞭解的足夠深刻,雖然我知道這個模式是什麼了,但是可能理解上還有一些欠缺,建議大家看完這篇部落格還能再去搜一些資料來使自己對這個模式瞭解的更為深刻一些。 我們現在說

大話設計模式觀察模式

當物件間存在一對多關係時,則使用觀察者模式(Observer Pattern)。比如,當一個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。主要解決一個物件狀態改變給其他物件通知的問題,而且要考慮到易用和低耦合,保證高度的協作。 大話設計模式

設計模式——觀察模式(C++實現)

ace mes des ret rtu cto pattern virt date 1 #include <iostream> 2 #include <vector> 3 #include <algorithm>

C#設計模式--觀察模式(發布-訂閱模式

工廠方法 設計 解決 line strac itl names spa ret 0.C#設計模式--簡單工廠模式 1.C#設計模式--工廠方法模式 2.C#設計模式--抽象工廠模式 3.C#設計模式--單例模式 4.C#設計模式--建造者模式 5.C#設計模式--

設計模式觀察模式

5.1 servers 監聽 val notify src [] ati 場景 1 定義   觀察者模式,有時又稱為發布-訂閱模式。定義了一種一對多個依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己

c#設計模式-觀察模式

正在 pro 描述 設計 abstract logs 名單 ron alt Observer 與 Subject 互為耦合,但是這種耦合的雙方都依賴於抽象,而不依賴於具體。 一、觀察者模式 目的 概述 原理 二、 C#中的觀察者模式 概述 模型與觀察者基類 優點 三、

三國設計模式——觀察模式

efault bre ati fault println bst imp default mman 1 package observer; 2 3 public abstract class ObserverGenerals { 4 5 protect

項目中用到的設計模式-觀察模式

道理 generated 商家 商城項目 bean boolean collect 相關 not 一:觀察者模式簡單介紹   觀察者模式又稱為發布-訂閱模式(publish/subscribe),該模式定義了一種,一對多的依賴關系,讓多個觀察者同時監聽一個主題對像,這個主題

Java 設計模式 觀察模式

例如 null 可能 truct pri color img cte bstr   在閻宏博士的《JAVA與模式》一書中開頭是這樣描述觀察者(Observer)模式的:觀察者模式是對象的行為模式,又叫發布-訂閱(Publish/Subscribe)模式、模型-視圖(Mode

Python設計模式——觀察模式

val property 創建倉庫 tool return observe send als 工作流 例子1:class Service: def __init__(self, service_name, process_name, port, enable_mon

Java設計模式---------觀察模式

個人 api 如果 修改 沒有 zed return pla 細節 以下內容主要來自《HeadFirst設計模式》一書和博文:http://www.cnblogs.com/xrq730/p/4908686.html,僅作為個人的學習筆記使用。 觀察者模式 定義了對象之間的一

設計模式——觀察模式

param body 抽象 logs ring 依賴 ret rip system - 什麽是觀察者模式 觀察者模式有叫做發布訂閱模式,是對象間一種一對多的依賴關系,是的每當一個對象改變狀態時,則所有依賴於他的對象都會得到通知並自動更新。這其中過程就好比訂閱微信公眾號,公眾

設計模式-觀察模式

設計模式 觀察者模式 //主題 interface Subject { void Notify(); string msg { get; set; } UpdateHandler Update { get; set; } } de

Java常用設計模式——觀察模式

ray stat param servers face oid println override 角色 觀察者模式又叫做發布-訂閱-模式、模型-視圖-模式、源-監聽器-模式或者從屬者模式。觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對

設計模式----觀察模式通俗實例

接口 pack ceo 軟件 依賴關系 http In array value 觀察者模式(一對多的依賴關系):主題對象發生變化時候,通知所有依賴該對象的觀察者對象,使得觀察者對象更新。 被觀察的對象:主題 依賴的對象:觀察者 例子:例如一個軟件更新版本了,會通知用戶

android 開發設計模式---觀察模式

嚴格 oid line eventbus 否則 post vat 關系 lock 情景1 有一種短信服務,比如天氣預報服務,一旦你訂閱該服務,你只需按月付費,付完費後,每天一旦有天氣信息更新,它就會及時向你發送最新的天氣信息。 情景2 雜誌的訂閱,你只需向郵局

設計模式中的黃金搭檔(一對活寶):命令模式+觀察模式

現有場景描述:現在無論是系統自帶的鍵盤還是第三方的鍵盤一般都自帶撤銷和恢復功能,你知道它們是用的什麼模式實現的嗎?它們用的是==命令模式+觀察者模式==,你答對了嗎?簡單科普一下啥是==Command模式==? Command模式:- 模式型別:行為類模式- 定義:將一個操作、一個方法呼叫、一個命令封裝成一個

android設計模式——觀察模式

定義:物件間一種一對多的依賴關係,使得一個物件改變狀態,則所有依賴於他的物件都會得到通知並被自動更新 使用場景: 關聯行為場景。 事件多級觸發場景 跨系統的訊息交換場景。如訊息佇列,事件匯流排的處理機制。 應用舉例:觀察者訂閱被觀察者的狀態,當被觀察者狀態改變的時候

設計模式----觀察模式 【含例項】

日常學習C++設計模式中... 給自己留個備份,有問題歡迎溝通交流。 好了,開始嘍~ --------------------------------------------------------------------------------------------------

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

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