首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式無廢話系列十九:觀察者模式(三)—— 代碼執行解析與擴充性展示

     編輯:關於C語言

代碼執行結果

代碼深度解析

  • 本例採用 C# 事件機制實作觀察者模式,雖與 GOF「標準」模式不同,但保留核心角色。GOF 模式歷史悠久,善用 C# 語言特性可改進實作。
  • Pager(抽象主體/被觀察者):ChangePage 方法負責觸發事件。ChangePageHandler 委派將主體作為參數傳遞,觀察者可據此調整狀態。
  • ButtonPager(具體主體):NextPage/PreviousPage 先檢查頁碼邊界,更新索引後呼叫基類 ChangePage() 通知所有觀察者。
  • Control 介面(抽象觀察者):定義統一回應介面 ChangePage(Pager sender)。
  • GridView、Label(具體觀察者):無需關心通知機制,專注回應邏輯——GridView 重新繫結資料,Label 顯示頁碼資訊。
  • 角色複合:ButtonPager 同時實作 Control 介面,既是主體也是觀察者。現實中常見,如生物鏈中的螳螂(捕蟬者同時被黃雀觀察)。
  • ListPager 同理:需觀察 ButtonPager 變動。兩者的 ChangePage 均更新頁碼索引,因用戶非直接點擊 ListPager 翻頁,故需同步。Label、GridView 未更新索引僅因簡化實作。
  • 訂閱綁定:ButtonPager 事件註冊四個委派(含自身),複用程式碼。主體職責:通知觀察者;觀察者職責:更新狀態/回應事件。

擴充性展示

  • 新增下拉式分頁控件:建立 DropDownPager(繼承 Pager、實作 Control),掛鉤事件即可,無需修改既有代碼。
  • 新增 ListBox 控件:實作 Control 介面,訂閱所有 Pager 事件即可。

適用時機

  • 一個對象行為觸發多個對象行為(主體→觀察者)。
  • 降低耦合:主體不直接呼叫觀察者,改用動態訂閱事件自動串聯。
  • 靈活調整:動態增減訂閱者或訂閱事件。
注意:本例僅示範結構,未遵循 .NET 事件模型最佳實踐。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved