本篇文章為一個(gè)系列,主要深入淺出的談?wù)勗O(shè)計(jì)模式設(shè)計(jì),以方便我們?cè)陂_(kāi)發(fā)時(shí)候真正使用,而非為了面試才去學(xué)習(xí)。
1.設(shè)計(jì)模式是什么?
答:設(shè)計(jì)模式是一套被反復(fù)套用并被大部分人認(rèn)可的代碼設(shè)計(jì)經(jīng)驗(yàn)的一個(gè)總結(jié)。引入設(shè)計(jì)模式可以增強(qiáng)代碼性,保證代碼的可靠性。
2.設(shè)計(jì)模式遵循的六大原則是什么,分別是什么意思?
答:六大原則是單一職責(zé)原則、開(kāi)閉原則、里氏替換原則、依賴倒置原則、接口隔離原則、迪米特法則,這些原則其實(shí)不僅僅是設(shè)計(jì)模式要遵循的,我們寫(xiě)code也應(yīng)該遵循的。
單一職責(zé)原則:一個(gè)類應(yīng)該有且只有一個(gè)變化的原因
開(kāi)閉原則:對(duì)修改關(guān)閉對(duì)擴(kuò)展開(kāi)放
里氏替換原則:引用基類的地方必須能透明地使用其子類的對(duì)象
依賴倒置原則:針對(duì)接口編程而非實(shí)現(xiàn)細(xì)節(jié)
接口隔離原則:客戶端不應(yīng)該依賴它不需要的接口而應(yīng)該建立在最小接口上
迪米特法則:一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解
3.23種設(shè)計(jì)模式分類有哪些,每個(gè)分類都有哪些設(shè)計(jì)模式?
答:設(shè)計(jì)模式分為創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式三種,所謂創(chuàng)建型模式就是表示代替new方法動(dòng)態(tài)創(chuàng)建對(duì)象的一個(gè)思想,結(jié)構(gòu)型模式就是涉及到如何組合類和對(duì)象以獲得更大的結(jié)構(gòu)的,行為型模式對(duì)在不同的對(duì)象之間劃分責(zé)任和算法的抽象化。
創(chuàng)建型模式五種,分別是工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式(*)。
工廠模式:工廠方法代替new操作的一種模式
抽象工廠方法:為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口而無(wú)需指定它們的具體類
單例模式:指系統(tǒng)運(yùn)行時(shí)只存在一個(gè)這個(gè)類型的對(duì)象
建造者模式:將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
原型模式:使用原型實(shí)例指定待創(chuàng)建對(duì)象的類型,并且通過(guò)復(fù)制這個(gè)原型來(lái)創(chuàng)建新的對(duì)象
結(jié)構(gòu)型模式有七種,分別是適配器模式、裝飾器模式、代理模式(*)、外觀模式、橋接模式、組合模式、享元模式。
適配器模式:讓那些接口不兼容的類可以一起工作
裝飾器模式:對(duì)已經(jīng)存在的某些類進(jìn)行裝飾,以此來(lái)擴(kuò)展一些功能
代理模式:某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制對(duì)原對(duì)象的引用,分為動(dòng)態(tài)代理與靜態(tài)代理
外觀模式(Facade):向客戶端提供了一個(gè)客戶端可以訪問(wèn)系統(tǒng)的接口
橋接模式:抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化
組合模式:將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象使用具有一致性
享元模式:運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象
行為型模式有11種,分別是策略模式(*)、模板方法模式、觀察者模式(*)、迭代子模式、責(zé)任鏈模式(*)、命令模式(*)、備忘錄模式、狀態(tài)模式(*)、訪問(wèn)者模式、中介者模式(*)、解釋器模式。
策略模式:一個(gè)類的行為或其算法可以在運(yùn)行時(shí)更改
模板方法模式:定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類中
觀察者模式:一個(gè)對(duì)象被修改時(shí),則會(huì)自動(dòng)通知它的所有依賴對(duì)象
迭代子模式:可以順序地訪問(wèn)一個(gè)聚集中的元素而不必暴漏聚集的內(nèi)部表象
責(zé)任鏈模式:很多對(duì)象由每一個(gè)對(duì)象對(duì)其下家的引用而連接起來(lái)形成一條鏈
命令模式:請(qǐng)求以命令的形式包裹在對(duì)象中,并傳給調(diào)用對(duì)象
備忘錄模式:在不破壞封閉的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)
狀態(tài)模式:當(dāng)一個(gè)對(duì)象內(nèi)在狀態(tài)改變時(shí)允許其改變行為,這個(gè)對(duì)象看起來(lái)像改變了其類
訪問(wèn)者模式:數(shù)據(jù)操作與數(shù)據(jù)結(jié)構(gòu)分離的設(shè)計(jì)模式
中介者模式:用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互
解釋器模式:把事物高頻率的特征和符號(hào)都通過(guò)解釋器來(lái)解釋,并加以組合處理
其中帶(*)表示經(jīng)常會(huì)用到的,有什么問(wèn)題請(qǐng)隨時(shí)留言,謝謝??!