模板方法模式
定義一個(gè)操作中算法的框架伸眶,而將一些步驟延遲到子類中,使得子類可以改變算法的結(jié)構(gòu),即可重新定義該算法中的某些特定步驟事哭。
優(yōu)點(diǎn)及適用場(chǎng)景:
- 容易擴(kuò)展
- 便于維護(hù)
- 比較靈活
在多個(gè)子類擁有相同的方法,并且這些方法邏輯相同時(shí)瓜富,可以考慮使用模板方法模式鳍咱。
中介者模式
用一個(gè)中介者對(duì)象封裝一系列的對(duì)象交互,中介者使各個(gè)對(duì)象顯示地相互作用与柑,從而使耦合松散谤辜,而且可以獨(dú)立地改變它們之間的交互。
優(yōu)點(diǎn):
- 適當(dāng)?shù)氖褂弥薪檎吣J娇梢员苊馔骂愔g的過(guò)度耦合价捧,使得各同事類之間可以相對(duì)獨(dú)立地使用
- 可以使對(duì)象間一對(duì)多的關(guān)聯(lián)關(guān)系轉(zhuǎn)變?yōu)橐粚?duì)一丑念,使對(duì)象間的關(guān)系易于理解和維護(hù)
- 可以將對(duì)象的行為和協(xié)作進(jìn)行抽象,能夠比較靈活的處理對(duì)象間的相互作用
適用場(chǎng)景:
一般來(lái)說(shuō)適用于將同事類之間網(wǎng)狀結(jié)構(gòu)的關(guān)系轉(zhuǎn)換為星狀結(jié)構(gòu)结蟋。
觀察者模式
定義對(duì)象間一種一對(duì)多的依賴關(guān)系脯倚,使得當(dāng)每一個(gè)對(duì)象改變狀態(tài),則所有依賴于它的對(duì)對(duì)象都會(huì)得到通知并自定更新嵌屎。
觀察者與被觀察者之間是屬于輕度的關(guān)聯(lián)關(guān)系推正,并且是抽象耦合的恍涂,這樣,對(duì)于兩者來(lái)說(shuō)都比較容易進(jìn)行擴(kuò)展植榕。
觀察者模式是一種常用的觸發(fā)機(jī)制再沧,它形成一條觸發(fā)鏈,依次對(duì)各個(gè)觀察者的方法進(jìn)行處理内贮。同時(shí)产园,這也算是觀察者模式的一個(gè)缺點(diǎn),由于是鏈?zhǔn)接|發(fā)夜郁,當(dāng)觀察者數(shù)量過(guò)多時(shí)什燕,性能是一個(gè)問(wèn)題。
訪問(wèn)者模式
封裝某些作用于某種數(shù)據(jù)結(jié)構(gòu)中各元素的操作竞端,它可以在不改變數(shù)據(jù)結(jié)構(gòu)的前提下定義作用于這些元素的新的操作屎即。
優(yōu)點(diǎn):
- 符合單一職責(zé)原則:凡是適用訪問(wèn)者模式的場(chǎng)景中,元素類中需要封裝在訪問(wèn)者中的操作必定是與元素類本身關(guān)系不大且是易變的操作事富,適用訪問(wèn)者模式一方面符合單一職責(zé)模式技俐,另一方面,封裝的操作通常是易變的统台,在發(fā)生變化時(shí)雕擂,可以在不改變?cè)乇旧淼那闆r下實(shí)現(xiàn)擴(kuò)展。
- 擴(kuò)展性良好:元素可以通過(guò)接受不同的訪問(wèn)者來(lái)實(shí)現(xiàn)對(duì)不同操作的擴(kuò)展贱勃。
適用場(chǎng)景: - 假如一個(gè)對(duì)象中存在著一些與本對(duì)象不相干(或者關(guān)系較弱時(shí))的操作井赌,為了避免污染這個(gè)對(duì)象,可以使用訪問(wèn)者模式來(lái)把這些操作封裝到訪問(wèn)者中去贵扰。
- 假如一組對(duì)象中仇穗,存在著相似的操作,為了避免出現(xiàn)大量重復(fù)的代碼戚绕,也可以將這些重復(fù)的代碼封裝到訪問(wèn)者中去纹坐。
但是訪問(wèn)者模式并不是那么完美,它的致命缺陷是:增加新的元素類比較困難舞丛。訪問(wèn)者模式比較適用于已有功能的重構(gòu)耘子。
命令模式:
將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,從而讓你使用不同的請(qǐng)求把客戶端參數(shù)化瓷马,對(duì)請(qǐng)求排隊(duì)或者記錄請(qǐng)求日志拴还,可以提供命令的撤銷和恢復(fù)功能。顧名思義欧聘,命令模式就是對(duì)命令的封裝,優(yōu)缺點(diǎn)如下:
- 封裝性好
- 擴(kuò)展性好
缺點(diǎn)是如果命令很多端盆,開(kāi)發(fā)起來(lái)就很麻煩怀骤。
適用場(chǎng)景:
對(duì)于大多數(shù)請(qǐng)求-響應(yīng)模式的功能费封,比較適合命令行模式。
責(zé)任鏈模式
使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求蒋伦,從而避免了請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系弓摘。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求痕届,直到有對(duì)象處理它為止韧献。
優(yōu)缺點(diǎn):
- 責(zé)任鏈模式與if...else...相比,它的耦合性要低一些研叫,當(dāng)責(zé)任鏈比較長(zhǎng)時(shí)锤窑,性能問(wèn)題比較嚴(yán)重。
適用場(chǎng)景:
假如使用if...else...語(yǔ)句來(lái)組織一個(gè)責(zé)任鏈感到力不從心時(shí)嚷炉,可以采用責(zé)任鏈模式渊啰。