日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#实现观察者模式

發布時間:2023/12/4 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#实现观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念的東西我就不講了,網上一大堆,我們直接進入正題。假設有這樣一個場景:用戶輸入賬號、密碼,登錄成功后,需要給用戶發送一條短信并增加5積分,代碼如下:

相信很多人會這樣寫,包括我自己。這樣寫非常簡單,一般情況下也沒什么問題,但擴展性很差。比如我現在想加一個功能:登錄成功后需要記錄用戶IP等到日志中。這時我們又要再加一個LogService來處理,代碼如下:

這時我們發現不對勁了,這樣代碼耦合的太嚴重了,我們完全可以把登錄成功后的一堆業務封裝成單獨的模塊,用戶在登錄成功后,只要通知這個模塊就行了。代碼如下:

上面的代碼我就不多解釋了,實在太簡單了。主要就是定義一個訂閱接口:LoginSuccessObserver,外加三個實現類,每個實現類中取出封裝好的message參數進行對應的業務處理。我們再看下登錄的地方是怎么實現通知的(PS:期望不要太高,其實就一個for循環)。代碼如下:

上面的代碼相信大家都能看的懂,就是在UserController類中增加一個訂閱者列表:LoginSuccessObservers,然后登錄成功后,遍歷這個列表進行業務處理就行。由于對登錄業務沒有影響,所以我們上面另開了一個線程進行發送通知。然后下面有兩個方法:增加、刪除訂閱者。在調用的地方,只要按自己需要增加訂閱者就行了。代碼如下:

到此為止,觀察者模式我們就講完了,相信大家已經理解這個模式了。也許你會說你舉的例子怎么和我之前看到的不太一樣,委托呢?事件呢?你說的肯定是“水到100度就滴滴響”的例子。其實怎么說呢,用這種循環的方式,還是用事件委托的方式并不重要,重要的是你能辨別出場景。我們也可以給一個委托事件的版本,改造下,代碼如下:

其實就是用事件換掉原來的訂閱者列表,本質上是一樣,無非就是向事件或列表中添加訂閱者,我們再看下調用地方怎么改造。代碼如下:

這段我就不解釋了,相信大家都看的懂,最后我們來簡單總結一下:

  • 觀察者模式本質上就是訂閱-發布模式,即一個對象內部發生了一件事,要通知給對這件事有興趣的對象列表。最重要的是要識別出誰是發布者(Subject),誰是訂閱者(Observer)。

  • 上面的例子是在單個進程內通知,也可以使用消息隊列,比如RabbitMQ,進行多進程間的解耦。

今天講的內容非常簡單,如果能幫到你一點點,我就會很開心了,哈哈。

高冷地說聲拜拜~~

總結

以上是生活随笔為你收集整理的C#实现观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。