如何用c#寫(xiě)的聊天軟件)

這篇文章主要講解了“如何用c#寫(xiě)的聊天軟件)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何用c#寫(xiě)的聊天軟件)”吧!

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出方正免費(fèi)做網(wǎng)站回饋大家。

責(zé)任鏈模式

責(zé)任鏈模式包含了一些命令對(duì)象和一系列的處理對(duì)象,每一個(gè)處理對(duì)象決定它能處理哪些命令對(duì)象,它也知道如何將它不能處理的命令對(duì)象傳遞給該鏈中的下一個(gè)處理對(duì)象。該模式還描述了往該處理鏈的末尾添加新的處理對(duì)象的方法。

責(zé)任鏈模式我們并不陌生,Netty中的ChannelHandler、Sentinel的Slot都有運(yùn)用責(zé)任鏈模式。

Netty中的ChannelHandler責(zé)任鏈模式:

如何用c#寫(xiě)的聊天軟件)

 

Sentinel中的Slot責(zé)任鏈模式:

如何用c#寫(xiě)的聊天軟件)

舉例Netty與Sentinel的目的也在于這兩者在運(yùn)用上存在些許區(qū)別,前者實(shí)現(xiàn)的是雙向傳遞的責(zé)任鏈,后者則是單向傳遞。兩者也存在共同點(diǎn),都是使用鏈表將一系列處理對(duì)象連成責(zé)任鏈。

除了使用單向或者雙向鏈表方式實(shí)現(xiàn)責(zé)任鏈調(diào)用模式,還可以使用集合實(shí)現(xiàn),將處理對(duì)象按順序放入集合中,通過(guò)遍歷集合方式調(diào)用。

過(guò)濾器、攔截器與責(zé)任鏈的關(guān)系

在23種設(shè)計(jì)模式中,并沒(méi)有對(duì)過(guò)濾器模式與攔截器模式單獨(dú)定義,在wiki上也只是將這兩者歸類(lèi)為結(jié)構(gòu)型設(shè)計(jì)模式。

無(wú)論是過(guò)濾器模式還是攔截器模式,在實(shí)現(xiàn)上,兩者都依賴(lài)責(zé)任鏈模式,因此,筆者將過(guò)濾器模式與攔截器模式看作是責(zé)任鏈模式的一種衍生模式,是責(zé)任鏈模式的一個(gè)變種,但不能使用等號(hào)。

過(guò)濾器模式是將所有過(guò)濾器對(duì)象構(gòu)成鏈表,只要其中一個(gè)過(guò)濾器滿足條件,那么后續(xù)的過(guò)濾器將不會(huì)被調(diào)用,命令最終可由該過(guò)濾器處理。

過(guò)濾器的過(guò)濾方法一般返回boolean值,表示過(guò)濾或不過(guò)濾,當(dāng)過(guò)濾方法返回值類(lèi)型為void時(shí),表示過(guò)濾器在決定過(guò)濾當(dāng)前命令后,必須對(duì)該命令作出響應(yīng)以結(jié)束命令處理。

過(guò)濾器模式對(duì)過(guò)濾器的調(diào)用順序并沒(méi)有嚴(yán)格要求,是否要求順序主要取決于具體的使用場(chǎng)景。

如需考慮優(yōu)先級(jí)的黑白名單過(guò)濾器,順序不同結(jié)果截然不同;

如Shiro使用過(guò)濾器模式實(shí)現(xiàn)的認(rèn)證授權(quán)功能。

如何用c#寫(xiě)的聊天軟件)

(Shiro框架過(guò)濾器模式)

攔截器模式與過(guò)濾器模式大致相同,常見(jiàn)與動(dòng)態(tài)代理模式結(jié)合使用,攔截器可以攔截方法調(diào)用(請(qǐng)求)或者改變方法調(diào)用(請(qǐng)求)傳遞的參數(shù)。

代理模式與委托模式的關(guān)系

參考維基百科:代理模式的目標(biāo)是定義代理對(duì)象,該對(duì)象在客戶(hù)端和實(shí)際主體之間操作,以控制對(duì)真實(shí)主體的訪問(wèn),并在每次訪問(wèn)真實(shí)主題時(shí)執(zhí)行必要的任務(wù)。

代理模式也分動(dòng)態(tài)代理和靜態(tài)代理,其中動(dòng)態(tài)代理模式是使用最廣、最多的代理模式。代理模式也是使用最多的設(shè)計(jì)模式之一。

參考維基百科:委托模式是軟件設(shè)計(jì)模式中的一項(xiàng)基本技巧。在委托模式中,有兩個(gè)對(duì)象參與處理同一個(gè)請(qǐng)求,接受請(qǐng)求的對(duì)象將請(qǐng)求委托給另一個(gè)對(duì)象來(lái)處理。

代理模式與委托模式到底哪里不同也是飽受爭(zhēng)議。

在23種設(shè)計(jì)模式中并沒(méi)有對(duì)委托模式單獨(dú)定義,有人認(rèn)為,委托模式只是代理模式的別稱(chēng),也有人認(rèn)為,委托并不一定要調(diào)用相同方法,也不需要實(shí)現(xiàn)相同接口,而代理是代理一個(gè)方法或者一個(gè)接口的所有方法。

從定義上來(lái)看,兩者確實(shí)是不同的設(shè)計(jì)模式,對(duì)于上述兩種觀點(diǎn),如果要論對(duì)錯(cuò),筆者更認(rèn)可后者。

筆者曾經(jīng)使用C#開(kāi)發(fā)windows應(yīng)用程序使用比較多的是委托模式,如處理一個(gè)日記事件,當(dāng)監(jiān)聽(tīng)到日記時(shí),委托一個(gè)類(lèi)去將日記顯示到前端控件上,委托者委托受托者將日記顯示,兩者之間并沒(méi)有嚴(yán)格的約定。

如何用c#寫(xiě)的聊天軟件)

(c#寫(xiě)的聊天軟件)

組合模式與策略模式組合使用

組合模式也叫復(fù)合模式,復(fù)合模式描述一組對(duì)象,這些對(duì)象與相同類(lèi)型對(duì)象的單個(gè)實(shí)例處理的方式相同。復(fù)合的目的是將對(duì)象"組合"到樹(shù)結(jié)構(gòu)中,以表示部分整體層次結(jié)構(gòu)。

通俗的理解,組合模式是將實(shí)現(xiàn)同一個(gè)接口的實(shí)例組合到一起,也可以將多個(gè)相同類(lèi)型的組合組合到一起,構(gòu)成一棵數(shù)。當(dāng)外部調(diào)用這棵數(shù)的方法時(shí),所有的葉子節(jié)點(diǎn)的方法都會(huì)被調(diào)用。

組合模式我們可能比較陌生,所以我們看一個(gè)實(shí)例來(lái)理解。

1、聲明組合中的對(duì)象接口:組件(Component),并提供接口實(shí)現(xiàn)類(lèi)(Leaf);

如何用c#寫(xiě)的聊天軟件)

2、定義具有組件行為的組合類(lèi),存儲(chǔ)組件、支持添加組件;

如何用c#寫(xiě)的聊天軟件)

3、通過(guò)組合操作組合中的對(duì)象。

如何用c#寫(xiě)的聊天軟件)

參考維基百科:策略模式指對(duì)象有某個(gè)行為,但是在不同的場(chǎng)景中,該行為有不同的實(shí)現(xiàn)算法。

組合模式與策略模式組合使用,在SpringBoot的web框架中非常常見(jiàn),例如實(shí)現(xiàn)方法參數(shù)解析。

定義方法參數(shù)解析器(HandlerMethodArgumentResolver),HandlerMethodArgumentResolver即是策略模式中的策略接口(Strategy),也是組合模式中的組件(Component)。

如何用c#寫(xiě)的聊天軟件)

組合模式將具有相同處理方式的對(duì)象組合到一起,也就是將所有方法參數(shù)解析器組合到一起。

策略模式根據(jù)方法參數(shù)的類(lèi)型或者參數(shù)上的注解等選擇一個(gè)能夠解析該方法參數(shù)的解析器,由解析器從請(qǐng)求(數(shù)據(jù)包)中解析出方法參數(shù)。

HandlerMethodArgumentResolverComposite即是組合模式中的組合(Composite),也是策略模式中的Context。

如何用c#寫(xiě)的聊天軟件)

RequestResponseBodyMethodProcessor負(fù)責(zé)解析被@ResponseBody注解注釋的方法參數(shù)、PathVariableMethodArgumentResolver負(fù)載解析被@PathVariable注解注釋的方法參數(shù),這些都是組合模式中的葉子節(jié)點(diǎn)(Leaf),也是策略模式中的實(shí)體策略。

適配器模式

適配器模式的定義:適配器模式是使因接口不兼容而不能在一起工作的類(lèi)能在一起工作,做法是將類(lèi)自己的接口包裹在一個(gè)已存在的類(lèi)中。

以實(shí)現(xiàn)支付結(jié)果回調(diào)失敗定時(shí)重試為例,假設(shè)現(xiàn)有兩種失敗定時(shí)重試實(shí)現(xiàn)方案:

一種是支持使用cron表達(dá)式的失敗定時(shí)重試;

如何用c#寫(xiě)的聊天軟件)

另一種是支持自定義周期的失敗定時(shí)重試,如間隔2秒、4秒、8秒...后重試。

如何用c#寫(xiě)的聊天軟件)

使用適配器模式將兩種方式組合到一起對(duì)外提供服務(wù),并且做一些擴(kuò)展。

如何用c#寫(xiě)的聊天軟件)

對(duì)于外部調(diào)用者而言,只需要訪問(wèn)一個(gè)接口就能獲得多種方式的支持,內(nèi)部多種方式一起對(duì)外提供服務(wù)。

適應(yīng)不同場(chǎng)景的使用方式

如何理解設(shè)計(jì)模式應(yīng)當(dāng)為適應(yīng)不同場(chǎng)景作出改變?我們以封裝json序列化和反序列化工具為例。

在實(shí)際項(xiàng)目中,我們可以使用gson、Jackson等框架實(shí)現(xiàn)Java對(duì)象的序列化與反序列化,但一般我們不會(huì)同時(shí)使用多個(gè),也不會(huì)存在面對(duì)不同的業(yè)務(wù)使用不同框架的情況。相反的,一般我們只會(huì)選擇其中一種,并且不會(huì)經(jīng)常改變。

使用策略模式可以實(shí)現(xiàn)后期切換框架而不需要修改業(yè)務(wù)代碼,但這種場(chǎng)景下,我們真的需要教科書(shū)式的實(shí)現(xiàn)策略模式嗎。

最適合的方法應(yīng)當(dāng)是根據(jù)引入不同的框架決定使用哪種序列化策略,通過(guò)類(lèi)加載實(shí)現(xiàn)“策略”,這種微妙的改變?yōu)榉庋b的組件提供了更智能的策略。

例如,我們?cè)陧?xiàng)目中添加gson的依賴(lài)后,整個(gè)項(xiàng)目的序列化和反序列化工作都將由gson完成,而當(dāng)我們把依賴(lài)gson改為依賴(lài)Jackson時(shí),整個(gè)項(xiàng)目的序列化和反序列化工作都將自動(dòng)切換到Jackson。

如何用c#寫(xiě)的聊天軟件)

感謝各位的閱讀,以上就是“如何用c#寫(xiě)的聊天軟件)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何用c#寫(xiě)的聊天軟件)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

本文標(biāo)題:如何用c#寫(xiě)的聊天軟件)
網(wǎng)站地址:http://bm7419.com/article44/pcsjhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、ChatGPT外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、搜索引擎優(yōu)化、用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)