C#物件導向模式設計第十九講:Observer 觀察者模式(行為型模式)

來源:互聯網
上載者:User

(根據MSDN WebCast相關課程整理)

常用設計模式有23種,通常可以分為建立型(5種),結構型(7種)和行為型(11種)三大類型。

考察以下情境:ATM機操作中,當持人訂閱了簡訊,郵件等通知的話,當有人對卡面在ATM機上有操作時,就會即時發出簡訊或郵件。這就是所謂的觀察者模式。

當一個對象發生變化時,對它的變化感興趣的其它對象(訂閱了這個變化,即觀察者)都可以得到通知。

GoF:定義對象間的一種一對多的依賴關係,以便當一個對象的狀態發生變化時,所有依賴它的對象都能得到通知。

這是一種不好的設計方式,當對WithDraw()這一帳戶變化感興趣的對象發生變化時,如有新的對象也對此感興趣,或使用者取消了郵件通知,現有模式就難以適用這種變化。BankAccount中的Emailer和Mobile都是強依賴(BankAccount強依賴於Emailer和Mobile)。

根據依賴倒置的原則,我們將對這一設計進行改進。讓Emailer和Mobile依賴於一個統一的介面(IObsever),則BankAccount只依賴於這個介面。由於對帳戶變化感興趣的對象也易發生變化,我們把這些對象提取出來,形成一個抽象的Subject類,統一管理,BankAccount繼承這一Subject,這樣,就解除了BankAccount對象與訂閱者之間的依賴關係。

Observer模式可以獨立的改變(擴充)目標的觀察者。

C#中的Event就是典型的觀察者模式的應用。

介面方法要求傳回值,方法名和參數都一致,而事件或委託中,方法名可以不同。

<完>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.