架构师进阶之独孤九剑:设计模式详解
我們繼續(xù)架構(gòu)師進(jìn)階之獨(dú)孤九劍進(jìn)階,目前我們?nèi)匀辉诘谝浑A段:程序設(shè)計(jì)和開(kāi)發(fā)環(huán)節(jié)。
“
設(shè)計(jì)模式不僅僅只是一種規(guī)范,更多的是一種設(shè)計(jì)思路和經(jīng)驗(yàn)總結(jié),目的只有一個(gè):提高你高質(zhì)量編碼的能力。以下主要分為三個(gè)環(huán)節(jié):為什么要用設(shè)計(jì)模式、設(shè)計(jì)模式的分類,以及最后推薦大家三本設(shè)計(jì)模式相關(guān)的書(shū)籍,希望對(duì)你有所幫助。
為什么要使用設(shè)計(jì)模式
1、設(shè)計(jì)模式是前人根據(jù)經(jīng)驗(yàn)總結(jié)出來(lái)的,使用設(shè)計(jì)模式,就相當(dāng)于是站在了前人的肩膀上。
2、設(shè)計(jì)模式使程序易讀。熟悉設(shè)計(jì)模式的人應(yīng)該能夠很容易讀懂運(yùn)用設(shè)計(jì)模式編寫(xiě)的程序。
3、設(shè)計(jì)模式能使編寫(xiě)的程序具有良好的可擴(kuò)展性,滿足系統(tǒng)設(shè)計(jì)的開(kāi)閉原則。比如策略模式,就是將不同的算法封裝在子類中,在需要添加新的算法時(shí),只需添加新的子類,實(shí)現(xiàn)規(guī)定的接口,即可在不改變現(xiàn)有系統(tǒng)源碼的情況下加入新的系統(tǒng)行為。
4、設(shè)計(jì)模式能降低系統(tǒng)中類與類之間的耦合度。比如工廠模式,使依賴類只需知道被依賴類所實(shí)現(xiàn)的接口或繼承的抽象類,使依賴類與被依賴類之間的耦合度降低。
5、設(shè)計(jì)模式能提高代碼的重用度。比如適配器模式,就能將系統(tǒng)中已經(jīng)存在的符合新需求的功能代碼兼容新的需求提出的接口 。
6、設(shè)計(jì)模式能為常見(jiàn)的一些問(wèn)題提供現(xiàn)成的解決方案。
7、設(shè)計(jì)模式增加了重用代碼的方式。比如裝飾器模式,在不使用繼承的前提下重用系統(tǒng)中已存在的代碼。
設(shè)計(jì)模式分類和作用
1.總體來(lái)說(shuō)設(shè)計(jì)模式分為三大類:
2.創(chuàng)建型模式的作用:
創(chuàng)建型模式,顧名思義就是創(chuàng)建對(duì)象的模式,對(duì)對(duì)象實(shí)例化過(guò)程進(jìn)行了抽象。它們幫助一個(gè)系統(tǒng)獨(dú)立于如何創(chuàng)建、組合和表示它的那些對(duì)象。
3.創(chuàng)建型模式,共五種:
-
工廠方法模式
-
抽象工廠模式
-
單例模式
-
建造者模式
-
原型模式
1)工廠方法模式:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,也就是將創(chuàng)建工作推遲到子類來(lái)完成。
2)抽象工廠模式:提供一個(gè)創(chuàng)建一系列相關(guān)或者相互依賴對(duì)象的接口,而無(wú)需指定它們(指的是這些相關(guān)或者相互依賴的對(duì)象)的具體的類。
3)生成器模式:將一個(gè)復(fù)雜對(duì)象的構(gòu)建和它的表示相分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建出不同的表示。
4)原型模式:用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
5)單例模式:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。換句話來(lái)說(shuō)就是,單例模式通過(guò)將單例類的構(gòu)造器訪問(wèn)修飾符設(shè)置為private,禁止客戶直接通過(guò)new的方式來(lái)實(shí)例化單例類;與此同時(shí),單例類提供一個(gè)靜態(tài)訪問(wèn)點(diǎn)來(lái)獲取到通過(guò)內(nèi)部創(chuàng)建出的唯一單例類對(duì)象。
4.一般創(chuàng)建型設(shè)計(jì)模式面試必問(wèn):
建議以下四類都熟練掌握
-
工廠方法模式
-
抽象工廠模式
-
單例模式
-
建造者模式
5.結(jié)構(gòu)型模式,共七種:
-
適配器模式
-
裝飾器模式
-
代理模式
-
外觀模式
-
橋接模式
-
組合模式
-
享元模式
6.結(jié)構(gòu)型模式的作用:
結(jié)構(gòu)型模式主要用于描述如何組合類和對(duì)象以獲得更大的結(jié)構(gòu)。其中,結(jié)構(gòu)型類模式采用繼承機(jī)制來(lái)組合接口和實(shí)現(xiàn),而結(jié)構(gòu)型對(duì)象模式則采用組合/聚合方式來(lái)組合對(duì)象以實(shí)現(xiàn)新功能,因?yàn)樗梢栽谶\(yùn)行時(shí)刻改變對(duì)象組合關(guān)系,所以對(duì)象組合方式具有更大的靈活性,這種機(jī)制是無(wú)法通過(guò)靜態(tài)類組合來(lái)實(shí)現(xiàn)的。
7.結(jié)構(gòu)型模式簡(jiǎn)介:
1.適配器模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一種接口,這樣就能實(shí)現(xiàn)已有接口的復(fù)用。適配器主要有類適配器和對(duì)象適配器兩種實(shí)現(xiàn)方式,通常情況下,推薦優(yōu)先使用對(duì)象適配器方式。
2.橋接模式:將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它主要用于應(yīng)對(duì)多維度變化點(diǎn)問(wèn)題,通過(guò)對(duì)象組合的方式,可以極大地減少子類的數(shù)目,同時(shí)還能讓不同維度獨(dú)立擴(kuò)展變化。
3.組合模式:將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“整合-部分”的層次結(jié)構(gòu),從而使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性,也就是客戶端能夠透明地?zé)o區(qū)別地操作兩者。
4.裝飾模式:動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé),就增加功能來(lái)說(shuō),裝飾模式相比生成子類更為靈活。
5.外觀模式:為子系統(tǒng)中的一組接口提供一個(gè)一致的接口,外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。這樣原來(lái)需要客戶直接與復(fù)雜的子系統(tǒng)打交道、交互,現(xiàn)在這一過(guò)程將完全將交由外觀對(duì)象來(lái)完成,極大地方便了客戶端的調(diào)用。
6.享元模式:運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。享元模式關(guān)鍵是將對(duì)象的內(nèi)部狀態(tài)和外部狀態(tài)分離,盡可能地對(duì)“穩(wěn)定”的內(nèi)部狀態(tài)進(jìn)行共享,而將會(huì)隨運(yùn)用場(chǎng)景而改變的狀態(tài)通過(guò)外部狀態(tài)傳入。
7.代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。主要是在客戶端和目標(biāo)對(duì)象間增加一層間接層,通過(guò)這個(gè)間接層來(lái)完成對(duì)目標(biāo)對(duì)象的種種控制操作,所以也就形成了不同功能類型的代理呢,比如遠(yuǎn)程代理、保護(hù)代理和虛代理等等。
8.行為型模式,共十一種:
-
策略模式
-
模板方法模式
-
觀察者模式
-
迭代子模式
-
責(zé)任鏈模式
-
命令模式
-
備忘錄模式
-
狀態(tài)模式
-
訪問(wèn)者模式
-
中介者模式
-
解釋器模式
9.行為模式的作用:
行為型模式設(shè)計(jì)到算法和對(duì)象間的職責(zé)分配,不僅描述對(duì)象或類的模式,還描述它們之間的通信方式,刻劃了運(yùn)行時(shí)難以跟蹤的復(fù)雜的控制流,它們將你的注意力從控制流轉(zhuǎn)移到對(duì)象間的關(guān)系上來(lái)。
設(shè)計(jì)模式書(shū)籍推薦
1.第一本:Head First設(shè)計(jì)模適合式
適合:設(shè)計(jì)模式入門
2.第二本:設(shè)計(jì)模式
適合:有一定的設(shè)計(jì)模式基礎(chǔ)之后再看
3.第三本:敏捷軟件開(kāi)發(fā)
適合:對(duì)設(shè)計(jì)模式以及敏捷的了解,名字叫敏捷軟件開(kāi)發(fā),實(shí)則主要講解了大量設(shè)計(jì)模式。
推薦以上的三本設(shè)計(jì)模式相關(guān)的書(shū)籍,順序可以從上往下看,出入門到深入,也許效果會(huì)更好。
總結(jié)
以上是生活随笔為你收集整理的架构师进阶之独孤九剑:设计模式详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分布式队列编程优化篇
- 下一篇: 【萌味】小夕说,不了解动态空间增长的程序