為集合型別封裝觀察者模式

2021-09-23 19:52:13 字數 1979 閱讀 2111

本文是《設計模式_基於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顯示說明覆蓋父類的方法}}

最後附上單元測試

1

using

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 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...