本文是《設計模式_基於c#的工程化實現及擴充套件》的讀書筆記,部分內容直接引用該書。
以下**展示的是如何為集合型別封裝觀察者模式。這樣當集合元素增加的時候,通過我們自定義集合類的內部委託,就會通知到每個感興趣的觀察者。回想觀察者模式的實現原理。觀察者模式就是在被觀察者subjectclass裡面記錄乙個觀察者感性趣的訊息(在本例中是observerabledictionary類中的dictionaryeventargs),然後通過委託通知多個物件(通知機制的原理其實是通過後期將與subjectclass內部委託相同方法簽名的函式繫結在委託上,這樣當委託被呼叫的時候,繫結在這個委託上的方法一併被呼叫,實現通知多個觀察者的現象)。本本例中,observerabledictionary類通過繼承介面獲得乙個封裝好的委託屬性,通過繼承dictionary類獲得字典型別實現的緩衝特性。有了相應的委託和緩衝,在最後面observerabledictionary類通過重寫父類dictionary類的add的方法,在add方法裡面呼叫類內部定義的乙個委託,實現通知多個觀察者的效果、
using最後附上單元測試system;
using
system.collections.generic;
namespace
marvellousworks.practicalpattern.observerpattern.observercollection.******
public tkey key }
public tvalue value }
}//////
具有操作事件的idictionary
介面
/// ///
///public
inte***ce iobserverabledictionary:
idictionary
}//////
一種比較簡單的實現方式
/// ///
///public
class observerabledictionary:
dictionary
, iobserverabledictionary
set
}//////
為既有操作增加事件
/// ///
///public
newvoid add(tkey key, tvalue value)//
使用new顯示說明覆蓋父類的方法}}
1using
system;
2using
system.collections.generic;
3using
system.diagnostics;
4using
microsoft.visualstudio.testtools.unittesting;
5using
marvellousworks.practicalpattern.observerpattern.observercollection.******;
6namespace
marvellousworks.practicalpattern.observerpattern.test.observercollection.******726
27[testmethod]
28public
void
test()
2935
}36 }
為集合型別封裝觀察者模式
本文是 設計模式 基於c 的工程化實現及擴充套件 的讀書筆記,部分內容直接引用該書。以下 展示的是如何為集合型別封裝觀察者模式。這樣當集合元素增加的時候,通過我們自定義集合類的內部委託,就會通知到每個感興趣的觀察者。回想觀察者模式的實現原理。觀察者模式就是在被觀察者subjectclass裡面記錄乙...
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
觀察者模式
觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...