行為模式:用于方法實(shí)現(xiàn)以及對(duì)應(yīng)算法的設(shè)計(jì)模式。
1.策略模式
定義:為了讓客戶類能夠更好地使用某些算法而不需要知道其具體的實(shí)現(xiàn)
特點(diǎn):有一個(gè)策略工廠,實(shí)際調(diào)用由其控制
使用場(chǎng)景:有多種計(jì)算方式,或選擇方式(如用戶選擇用哪種支付方式)

2.模板方法模式
定義:準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體方法以及具體構(gòu)造形式實(shí)現(xiàn),然后聲明一些抽象方法來(lái)迫使子類實(shí)現(xiàn)剩余的邏輯
特點(diǎn):為了防止惡意的操作,一般模板方法都加上final關(guān)鍵字,不允許被覆寫/具體的執(zhí)行順序和實(shí)現(xiàn)由子類自己控制
使用場(chǎng)景:php中的鉤子由運(yùn)用到

3.觀察者模式
定義:定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新
特點(diǎn):低耦合,非侵入式的通知與更新機(jī)制
使用場(chǎng)景:某些功能實(shí)現(xiàn)后再執(zhí)行某個(gè)功能(如,用戶注冊(cè)成功后給積分,優(yōu)惠卷等/某些業(yè)務(wù)邏輯完成后需要記錄在log里)

4.迭代器模式
定義:又叫做游標(biāo)(Cursor)模式。提供一種方法訪問(wèn)一個(gè)容器(Container)對(duì)象中各個(gè)元素,而又不需暴露該對(duì)象的內(nèi)部細(xì)節(jié)。
特點(diǎn):繼承?Iterator
使用場(chǎng)景:最經(jīng)典的例子是foreach


5.責(zé)任鏈模式
定義:控制鏈模式。它主要由一系列對(duì)于某些命令的處理器構(gòu)成,每個(gè)查詢會(huì)在處理器構(gòu)成的責(zé)任鏈中傳遞,在每個(gè)交匯點(diǎn)由處理器判斷是否需要對(duì)它們進(jìn)行響應(yīng)與處理。
特點(diǎn):一定有一個(gè)上級(jí),只有最大權(quán)限不需要上級(jí)
使用場(chǎng)景:權(quán)限控制

6.命令模式
定義:將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,從而讓你使用不同的請(qǐng)求把客戶端參數(shù)化,對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,可以提供命令的撤銷和恢復(fù)功能
特點(diǎn):Receive接收者角色:該角色就是干活的角色,命令傳遞到這里是應(yīng)該被執(zhí)行的/Command命令角色:需要執(zhí)行的所有命令都在這里聲明/Invoker調(diào)用者角色:接收到命令,并執(zhí)行命令
使用場(chǎng)景:看這里

7.備忘錄模式
定義:又叫做快照模式(Snapshot)或 Token 模式,在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),這樣就可以在合適的時(shí)候?qū)⒃搶?duì)象恢復(fù)到原先保存的狀態(tài)

使用場(chǎng)景:最經(jīng)典的就是編輯器的control + z 恢復(fù)功能


8.狀態(tài)模式
定義:?允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為

使用場(chǎng)景:多用于層級(jí)較多的判斷(如電商項(xiàng)目中用戶等級(jí)判斷)

9.訪問(wèn)者模式
定義:訪問(wèn)者表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中各元素的操作
特點(diǎn):先將訪問(wèn)者傳入元素對(duì)象的Accept方法中,然后元素對(duì)象再將自己傳入訪問(wèn)者,之后訪問(wèn)者執(zhí)行元素的相應(yīng)方法
使用場(chǎng)景:方法擴(kuò)展(如下面的代碼,如果我需要再添加一個(gè)乘法,只需要添加一個(gè)visitordiv)


10.中介者模式
定義:兩個(gè)對(duì)象想要交互,但是兩者自己不去直接發(fā)生交互,而是通過(guò)中介者將兩者的進(jìn)行交互
使用場(chǎng)景:QQ游戲平臺(tái),聊天室、QQ群、短信平臺(tái)和房產(chǎn)中介

11.解釋器模式
定義:給定一個(gè)語(yǔ)言, 定義它的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來(lái)解釋語(yǔ)言中的句子



主要參考文檔:點(diǎn)這里,侵權(quán)刪
總結(jié):不管是什么模式,主要的感覺(jué)就是類與類之間的操作,都是為了開發(fā)出低耦合高擴(kuò)展性能的代碼(一般會(huì)從抽象類或是接口入手)