設(shè)計(jì)模式-行為型

一. 責(zé)任鏈模式

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的龍江網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

這種模式中,有發(fā)送者和接收者。通常,每個(gè)接收者都包含對(duì)另一個(gè)接收者的引用,形成一條鏈,如果一個(gè)接收者不能處理該請(qǐng)求,那么它會(huì)把相同的請(qǐng)求傳給下一個(gè)接收者,依次類推。

這種模式將請(qǐng)求的發(fā)送者和接收者解耦,但是不能保證請(qǐng)求一定被接收。

使用場景是有1. 多個(gè)對(duì)象可以處理同一個(gè)請(qǐng)求,具體哪個(gè)對(duì)象處理該請(qǐng)求由運(yùn)行時(shí)刻自動(dòng)確定。2. 在不明確指定接收者的情況下,向多個(gè)對(duì)象中的一個(gè)提交一個(gè)請(qǐng)求。 3. 可動(dòng)態(tài)指定一組對(duì)象處理請(qǐng)求。

這里有個(gè)特別形象的例子:
假設(shè)現(xiàn)在有個(gè)需求來了,首先是實(shí)習(xí)生拿到這個(gè)需求。
如果實(shí)習(xí)生能夠?qū)崿F(xiàn),直接實(shí)現(xiàn)。如果不行,他把這個(gè)需求交給初級(jí)工程師。
如果初級(jí)工程師能夠?qū)崿F(xiàn),直接實(shí)現(xiàn)。如果不行,交給中級(jí)工程師。
如果中級(jí)工程師能夠?qū)崿F(xiàn),直接實(shí)現(xiàn)。如果不行,交給高級(jí)工程師。
如果高級(jí)工程師能夠?qū)崿F(xiàn),直接實(shí)現(xiàn)。如果不行,交給 CTO。
如果 CTO能夠?qū)崿F(xiàn),直接實(shí)現(xiàn)。如果不行,直接跟產(chǎn)品說,需求不做。

這種模式和裝飾者模式有一定相似的地方。

二. 命令模式

根據(jù)菜鳥教程的描述,“在軟件系統(tǒng)中,行為請(qǐng)求者與行為實(shí)現(xiàn)者通常是一種緊耦合的關(guān)系,但某些場合,比如需要對(duì)行為進(jìn)行記錄、撤銷或重做、事務(wù)等處理時(shí),這種無法抵御變化的緊耦合的設(shè)計(jì)就不太合適”。

對(duì)于這個(gè)描述,我現(xiàn)在的理解不深。我理解的是,將一個(gè)請(qǐng)求用一個(gè)對(duì)象進(jìn)行封裝,相當(dāng)于在請(qǐng)求的發(fā)起者和請(qǐng)求之間加多一層,以便將請(qǐng)求者與請(qǐng)求進(jìn)行解耦。

三. 解析器模式

這個(gè)看不太明白,感覺沒有應(yīng)用的場景。

四. 迭代器模式

對(duì)這個(gè)理解的也不深,感覺用的也不多。

五. 中介者模式

用來降低多個(gè)對(duì)象和類之間的通信復(fù)雜性。這種模式提供了一個(gè)中介類,該類通常處理不同類之間的通信,并支持松耦合,使代碼易于維護(hù)。

具體的做法是將交聯(lián)型(網(wǎng)狀)的關(guān)系轉(zhuǎn)化為星型關(guān)系,1、系統(tǒng)中對(duì)象之間存在比較復(fù)雜的引用關(guān)系,導(dǎo)致它們之間的依賴關(guān)系結(jié)構(gòu)混亂而且難以復(fù)用該對(duì)象。 2、想通過一個(gè)中間類來封裝多個(gè)類中的行為,而又不想生成太多的子類。缺點(diǎn)可能是中介者會(huì)龐大,變得復(fù)雜難以維護(hù)。具體的應(yīng)用有mvc中的c的作用。

六. 備忘錄模式(應(yīng)用比較少?)

主要解決:所謂備忘錄模式就是在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),這樣可以在以后將對(duì)象恢復(fù)到原先保存的狀態(tài)。

何時(shí)使用:很多時(shí)候我們總是需要記錄一個(gè)對(duì)象的內(nèi)部狀態(tài),這樣做的目的就是為了允許用戶取消不確定或者錯(cuò)誤的操作,能夠恢復(fù)到他原先的狀態(tài),使得他有"后悔藥"可吃。

如何解決:通過一個(gè)備忘錄類專門存儲(chǔ)對(duì)象狀態(tài)。

關(guān)鍵代碼:客戶不與備忘錄類耦合,與備忘錄管理類耦合。

應(yīng)用實(shí)例: 1、后悔藥。 2、打game時(shí)的存檔。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、數(shù)據(jù)庫的事務(wù)管理。

優(yōu)點(diǎn): 1、給用戶提供了一種可以恢復(fù)狀態(tài)的機(jī)制,可以使用戶能夠比較方便地回到某個(gè)歷史的狀態(tài)。 2、實(shí)現(xiàn)了信息的封裝,使得用戶不需要關(guān)心狀態(tài)的保存細(xì)節(jié)。

缺點(diǎn):消耗資源。如果類的成員變量過多,勢(shì)必會(huì)占用比較大的資源,而且每一次保存都會(huì)消耗一定的內(nèi)存。

七. 觀察者模式
當(dāng)對(duì)象間存在一對(duì)多關(guān)系時(shí),則使用觀察者模式(Observer Pattern)。比如,當(dāng)一個(gè)對(duì)象被修改時(shí),則會(huì)自動(dòng)通知它的依賴對(duì)象。觀察者模式屬于行為型模式。應(yīng)用是mvc中的事件機(jī)制。

八. 狀態(tài)模式
將一個(gè)狀態(tài)封裝為一個(gè)對(duì)象(狀態(tài)對(duì)象),這個(gè)對(duì)象會(huì)依賴于持有該狀態(tài)的對(duì)象。狀態(tài)對(duì)象有一個(gè)或多個(gè)方法改變持有狀態(tài)的對(duì)象的行為。應(yīng)用有: 狀態(tài)機(jī),行為樹的動(dòng)作節(jié)點(diǎn)等。

九. 空對(duì)象模式
to be continued……

十. 策略模式

意圖:定義一系列的算法,把它們一個(gè)個(gè)封裝起來, 并且使它們可相互替換。

主要解決:在有多種算法相似的情況下,使用 if...else 所帶來的復(fù)雜和難以維護(hù)。

何時(shí)使用:一個(gè)系統(tǒng)有許多許多類,而區(qū)分它們的只是他們直接的行為。

如何解決:將這些算法封裝成一個(gè)一個(gè)的類,任意地替換。

關(guān)鍵代碼:實(shí)現(xiàn)同一個(gè)接口。

應(yīng)用實(shí)例: 1、諸葛亮的錦囊妙計(jì),每一個(gè)錦囊就是一個(gè)策略。 2、飛機(jī)game里面的bullet。

優(yōu)點(diǎn): 1、算法可以自由切換。 2、避免使用多重條件判斷。 3、擴(kuò)展性良好。

缺點(diǎn): 1、策略類會(huì)增多。 2、所有策略類都需要對(duì)外暴露。

十一. 模板模式
to be continued……

十二. 訪問者模式
to be continued……

to be continued

當(dāng)前題目:設(shè)計(jì)模式-行為型
瀏覽路徑:http://www.muchs.cn/article48/jdocep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、ChatGPT動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、域名注冊(cè)

廣告

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

營銷型網(wǎng)站建設(shè)