| 企服解答
設(shè)計(jì)模式是一種抽象的編程思想,并不局限于某一特定的編程語言,而是在許多語言之間相通的。比如在Java、C#、C++語言當(dāng)中,都可以使用到設(shè)計(jì)模式。但設(shè)計(jì)模式也有它的邊界,它的適用范圍是面向?qū)ο蟮木幊陶Z言。對(duì)于面向過程語言、函數(shù)式編程語言,談?wù)撛O(shè)計(jì)模式是沒有意義的。設(shè)計(jì)模型可以大致分為3種模式:創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式。
設(shè)計(jì)模式是什么
1、創(chuàng)建型模式
這一類設(shè)計(jì)模式的目的是用于創(chuàng)建對(duì)象。比如大家常用的工廠模式、單例模式,就屬于創(chuàng)建型模式。
2、結(jié)構(gòu)型模式
這一類設(shè)計(jì)模式的目的是優(yōu)化不同類、對(duì)象、接口之間的結(jié)構(gòu)關(guān)系。比較常用的代理模式、裝飾者模式,就屬于結(jié)構(gòu)型模式。
3、行為型模式
這一類設(shè)計(jì)模式的目的是更好地實(shí)現(xiàn)類與類之間的交互以及算法的執(zhí)行。比如策略模式、觀察者模式,就屬于行為型模式。
| 拓展閱讀
10大設(shè)計(jì)原則包括了:1、單一職責(zé)原則 SRP;2、開放-封閉原則 OCP;3、里氏替換原則 LSP;4、接口隔離原則 ISP;5、依賴倒置原則 DIP;6、最少知識(shí)原則(迪米特原則)LOD;7、組合/聚合復(fù)用原則 CRP;8、不要重復(fù)你自己 DRY;9、盡量保持簡單 KISS;10、不要過度設(shè)計(jì)你暫時(shí)用不到的邏輯 YAGNI。
1、單一職責(zé)原則 SRP
實(shí)現(xiàn)類要職責(zé)單一:如果一段代碼塊(函數(shù) 類 模塊)負(fù)責(zé)多個(gè)功能,那么當(dāng) A 功能需求發(fā)生改變的時(shí)候改動(dòng)了代碼,就有可能導(dǎo)致 B 功能出現(xiàn)問題,所以一段代碼塊只應(yīng)該負(fù)責(zé)一個(gè)職責(zé)。
2、開放-封閉原則 OCP
要對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉:通過修改老代碼來實(shí)現(xiàn)新功能可能導(dǎo)致老模塊出現(xiàn) BUG,所以我們應(yīng)該通過開發(fā)新代碼塊來實(shí)現(xiàn)新功能
3、里氏替換原則 LSP
不要破壞繼承體系:程序中的子類應(yīng)該可以替換父類出現(xiàn)的任何地方并保持預(yù)期不變。所以子類盡量不要改變父類方法的預(yù)期行為
4、接口隔離原則 ISP
設(shè)計(jì)接口的時(shí)候要精簡單一:當(dāng)類 A 只需要接口 B 中的部分方法時(shí),因?yàn)閷?shí)現(xiàn)接口需要實(shí)現(xiàn)其所有的方法,于是就造成了類 A 多出了部分不需要的代碼。這時(shí)應(yīng)該將 B 接口拆分,將類A需要和不需要的方法隔離開來
5、依賴倒置原則 DIP
面向接口編程:抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。核心是面向接口編程,我們應(yīng)該依賴于抽象接口,而不是具體的接口實(shí)現(xiàn)類或具體的對(duì)象
注意:上面的 SOLID 又稱為5大設(shè)計(jì)原則
6、最少知識(shí)原則(迪米特原則)LOD
降低耦合度:一個(gè)類或?qū)ο髴?yīng)該對(duì)其它對(duì)象保持最少的了解。只與直接的朋友(耦合)通信。
7、組合/聚合復(fù)用原則 CRP
多用組合少用繼承:盡可能通過組合已有對(duì)象(借用他們的能力)來實(shí)現(xiàn)新的功能,而不是使用繼承來獲取這些能力
8、不要重復(fù)你自己 DRY
功能語義重復(fù)應(yīng)該合并,代碼執(zhí)行重復(fù)應(yīng)該刪減,代碼邏輯重復(fù)但語義不同應(yīng)該保留
9、盡量保持簡單 KISS
盡可能使用簡單可讀性高的代碼實(shí)現(xiàn)功能,而不用邏輯復(fù)雜、實(shí)現(xiàn)難度高、可讀性差的方式
10、不要過度設(shè)計(jì)你暫時(shí)用不到的邏輯 YAGNI
不要過度優(yōu)化、不要過度預(yù)留擴(kuò)展點(diǎn)、不要設(shè)計(jì)同事看不懂的代碼。
[免責(zé)聲明]
文章標(biāo)題: 設(shè)計(jì)模式是什么
文章內(nèi)容為網(wǎng)站編輯整理發(fā)布,僅供學(xué)習(xí)與參考,不代表本網(wǎng)站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)溝通。發(fā)送郵件至36dianping@36kr.com,我們會(huì)在3個(gè)工作日內(nèi)處理。