程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 無廢話C#設計模式之十九:Observer(1)

無廢話C#設計模式之十九:Observer(1)

編輯:關於C語言

意圖

定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時, 所有依賴於它的對象都得到通知並被自動更新。

場景

這次不說游戲了,假設我們需要在一個Web頁面上分頁顯示數據。首先需要一個分頁控制器和一個顯示數據的表格。開始,客戶的需求很簡單,需要兩個向前翻頁向後翻頁的按鈕作為控制器,還需要一個GridVIEw來顯示數據。你可能會這麼做:

l 在頁面上放兩個按鈕和一個GridVIEw控件

l 點擊了下一頁按鈕判斷是否超出了頁面索引,如果沒有的話更新GridVIEw中的數據,然後更新控件的當前頁,如果翻頁後是最後一頁的話把下一頁按鈕設置為不可用。

l 點擊了上一頁按鈕判斷是否超出了頁面索引,如果沒有的話更新GridVIEw中的數據,然後更新控件的當前頁,如果翻頁後是第一頁的話把上一頁按鈕設置為不可用。

在這裡,我們的翻頁控件僅僅和GridVIEw進行依賴,看似問題不大。沒有想到,客戶看了Demo後覺得這樣的體驗不好,希望在頁面上呈現當前頁和總共頁。於是,我們又在頁面上加了一個Label控件,在按鈕的點擊事件裡面再去更新Label控件的值。客戶挺滿意的,隨著軟件中數據越來越多,總頁數達到了幾十頁,客戶覺得前後翻頁太不合理的了,希望有一個顯示頁數列表的分頁控制器,客戶的這個請求徹底使我們暈了,代碼被我們修改的非常混亂:

l 點擊了列表分頁控件的頁數後更新自身狀態、通知GridVIEw加載數據、通知按鈕分頁控件更新自身狀態、通知Label更新頁數信息。

l 點擊了按鈕分頁控件後更新自身狀態、通知GridVIEw加載數據、通知列表分頁控件更新自身狀態、通知Label更新頁數信息。

如果今後頁面上還需要針對分頁功能有任何修改的話,真不知道怎麼去改。由此引入觀察者模式來解決這些問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved