C Observer設計模式

2022-02-14 12:23:52 字數 1694 閱讀 8001

observer還是比較常見的東西,這裡我們主要介紹c# observer設計模式,包括介紹subject:監視物件和observer:監視者等方面。

假設我們有個高檔的熱水器,我們給它通上電,當水溫超過95度的時候:

1、揚聲器會開始發出語音,告訴你水的溫度;

2、液晶屏也會改變水溫的顯示,來提示水已經快燒開了。

現在我們需要寫個程式來模擬這個燒水的過程,我們將定義乙個類來代表熱水器,我們管它叫:heater,它有代表水溫的字段,叫做temperature;當然,還有必不可少的給水加熱方法boilwater(),乙個發出語音警報的方法makealert(),乙個顯示水溫的方法,showmsg()。

namespace delegate   

}  }  

// 發出語音警報  

private void makealert(int param)  度了:" , param);  

}  // 顯示水溫  

private void showmsg(int param) 度。" , param);  

}  }  

class program   

}  } 

c# observer設計模式簡介

上面的例子顯然能完成我們之前描述的工作,但是卻並不夠好。現在假設熱水器由三部分組成:熱水器、警報器、顯示器,它們來自於不同廠商並進行了組裝。那麼,應該是熱水器僅僅負責燒水,它不能發出警報也不能顯示水溫;在水燒開時由警報器發出警報、顯示器顯示提示和水溫。

這時候,上面的例子就應該變成這個樣子:

// 熱水器  

public class heater   

}  }  

// 警報器  

public class alarm 度了:" , param);  

}  }  

// 顯示器  

public class display度。" , param);  

}  } 

這裡就出現了乙個問題:如何在水燒開的時候通知報警器和顯示器?在繼續進行之前,我們先了解一下c# observer設計模式,c# observer設計模式中主要包括如下兩類物件:

1. subject:監視物件,它往往包含著其他物件所感興趣的內容。在本範例中,熱水器就是乙個監視物件,它包含的其他物件所感興趣的內容,就是temprature欄位,當這個欄位的值快到100時,會不斷把資料發給監視它的物件。

2. observer:監視者,它監視subject,當subject中的某件事發生的時候,會告知observer,而observer則會採取相應的行動。在本範例中,observer有警報器和顯示器,它們採取的行動分別是發出警報和顯示水溫。

在本例中,事情發生的順序應該是這樣的:

1. 警報器和顯示器告訴熱水器,它對它的溫度比較感興趣(註冊)。

2. 熱水器知道後保留對警報器和顯示器的引用。

3. 熱水器進行燒水這一動作,當水溫超過95度時,通過對警報器和顯示器的引用,自動呼叫警報器的makealert()方法、顯示器的showmsg()方法。

類似這樣的例子是很多的,gof對它進行了抽象,稱為c# observer設計模式:c# observer設計模式是為了定義物件間的一種一對多的依賴關係,以便於當乙個物件的狀態改變時,其他依賴於它的物件會被自動告知並更新。observer模式是一種松耦合的設計模式。

c observer 設計模式

observer 主要包含2個物件 1.subject 被監視者 監察物件,必須包含乙個監察著感興趣的東西。2.observer 監視者,負責監視subject物件,當subject物件的狀態發生改變會告知 observer 從而採取相應的方法。observer 是一種松耦合的設計模式,為了定義物件...

C Observer設計模式(委託 事件)

observer設計模式中主要包括如下兩類物件 subject 監視物件,它往往包含著其他物件所感興趣的內容。在本範例中,熱水器就是乙個監視物件,它包含的其他物件所感興趣的內容,就是temprature欄位,當這個欄位的值快到100時,會不斷把資料發給監視它的物件。observer 監視者,它監視s...

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...