由c#事件監聽、回調函數引發觀察者模式
事件監聽:
C#中的事件,可以簡單的理解為類或者對象發生了一件事,並且把這件事通知給了其他的類或者對象,其他的類或者對象可以根據事件的消息有所反應。
這非常類似設計模式中的觀察者模式。
引發事件的類或對象,可以稱之為事件源,注冊並對處理事件的類或者對象可以稱為事件訂閱者或者事件監聽者,我比較喜歡稱之為事件監聽者。
回調函數:
回調函數就是把一個方法的傳給另外一個方法去執行。在C#有很多回調函數,比如異步操作的時候。
把任意一個符合這個委托的方法傳遞進去,意思就是說這部分代碼是可變的。而設計上有一個抽離出可變部分代碼的原則,這種用法無疑可以用到那種場合了。
軟件模塊之間總是存在着一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。
同步調用是一種阻塞式調用,調用方要等待對方執行完畢 才返回,它是一 種單向調用;
回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;
異步調用是一種類似消息或事件的機制,不過它的調用方向剛好 相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)。
回調函數是別的函數通過一個函數指針調用的函數,也就是說,函數指針指向某一塊可執行代碼的引用。也就是說,回調函數並不神秘,它首先是一個函數,然后有一個函數指針指向它,在別的代碼塊中,通過這個函數指針調用了這個函數,僅此而已
觀察者模式:
觀察者模式定義了對象之間的一對多依賴,當一個對象改變狀態時,他的所有依賴者都會受到通知並自動更新。
1.觀察者模式定義了對象之間一對多的關系。
2.主題(也就是可觀察者)用一個共同的接口來更新觀察者。
3.觀察者和可觀察者用松耦合的方式結合,可觀察者不知道觀察者的細節,只知道觀察者實現了觀察者接口
4.有多個觀察者時,不可以依賴特點的通知次序。
其實事件的注冊和觸犯類似觀察者模式,特別是聚合事件就是一種觀察者模式!!!