關(guān)于編程的設(shè)計(jì)模式中七大原則的理解

一、前言

設(shè)計(jì)模式關(guān)乎了代碼的可擴(kuò)展性和可維護(hù)性,在開發(fā)過程中具有重要的江湖地位憎亚。此次僅討論關(guān)于七大原則(有的地方是六大原則,稍后說區(qū)別)的問題弄慰。

二第美、七大原則的基本概念

設(shè)計(jì)模式有七大原則,分別是:①單一職責(zé)原則曹动,②里氏替換原則斋日,③合成/聚合復(fù)用原則,④依賴倒轉(zhuǎn)原則墓陈,⑤接口隔離原則恶守,⑥最少知識(shí)原則,⑦開閉原則贡必。有的地方把組合/聚合復(fù)用去掉稱作六大原則兔港,個(gè)人認(rèn)為組合/聚合復(fù)用對(duì)于一個(gè)類的構(gòu)建還是很重要的,應(yīng)該加上仔拟。

三衫樊、七大原則的理解

1、單一職責(zé)原則

概念:就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因科侈,即一個(gè)類只負(fù)責(zé)一項(xiàng)功能载佳。

我認(rèn)為不僅僅對(duì)于類,同樣對(duì)于方法或者模塊臀栈,也應(yīng)當(dāng)遵守單一職責(zé)原則蔫慧,即一個(gè)方法負(fù)責(zé)一個(gè)功能。

例如一個(gè)類中有制作餃子的方法权薯,該方法應(yīng)該只負(fù)責(zé)組合買韭菜姑躲、搟皮、包餃子等多個(gè)方法盟蚣,而不是直接在制作餃子的方法中寫具體步驟黍析,這樣有利于改變其中某個(gè)步驟時(shí)不影響其他步驟。同樣一個(gè)類也只負(fù)責(zé)一項(xiàng)功能屎开,則制作餃子類應(yīng)當(dāng)只負(fù)責(zé)組合步驟阐枣,具體每個(gè)步驟應(yīng)當(dāng)是獨(dú)立單一職責(zé)的類。步驟類可以通過new或者組合(不推薦使用new牍戚,之后的組合/聚合復(fù)用原則會(huì)講為什么)的方式加入制作餃子類侮繁。

2、里氏替換原則

概念:子類型必須能夠替換掉它們的父類型如孝。

遵守該原則的方法是在繼承類時(shí)宪哩,除了擴(kuò)展一些新的功能之外,盡量不要?jiǎng)h除或者修改對(duì)父類方法的引用第晰,也盡量不要重載父類的方法锁孟。

如果違反該原則,會(huì)大量重寫父類中的方法茁瘦,降低代碼復(fù)用性品抽,反映出了父類構(gòu)建的不完善,將子類的特有方法寫在了父類中甜熔。

3圆恤、合成/聚合復(fù)用原則

概念:盡量使用合成/聚合,盡量不要使用類繼承。

合成和聚合是通過將需要使用的方法形成新的對(duì)象腔稀,將對(duì)象通過set方法注入類的屬性盆昙,來達(dá)到類調(diào)用需要使用的方法。

通過合成焊虏,可以靈活的改變類需要的方法(此時(shí)屬性聲明為包含所需方法的接口類淡喜,后面依賴倒轉(zhuǎn)會(huì)討論),實(shí)現(xiàn)較少的修改類诵闭,而對(duì)類進(jìn)行擴(kuò)展炼团。

4澎嚣、依賴倒轉(zhuǎn)原則

概念:高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象瘟芝;抽象不應(yīng)該依賴細(xì)節(jié)易桃,細(xì)節(jié)應(yīng)該依賴抽象。

依賴一般是指將對(duì)象傳遞給方法模狭。此處理解為將對(duì)象傳遞給屬性也應(yīng)當(dāng)稱之為依賴颈抚。即在一個(gè)類中使用其他的類,不應(yīng)當(dāng)直接使用其他類的實(shí)例化對(duì)象嚼鹉,應(yīng)當(dāng)使用其他類的抽象,然后通過注入或者傳遞的方式來使用具體實(shí)例化類驱富。

通過該原則锚赤,可以實(shí)現(xiàn)較少的修改類,而是通過不同的注入實(shí)現(xiàn)不同的功能褐鸥。該處使用了抽象的概念线脚,記得我一開始對(duì)接口有什么作用很不理解,在學(xué)習(xí)這個(gè)地方是對(duì)接口的作用有了深刻的理解叫榕。

5浑侥、接口隔離原則

概念:客戶端不應(yīng)該依賴它不需要的接口;一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上晰绎。

當(dāng)一個(gè)類(a)對(duì)另一個(gè)類(b)依賴時(shí)寓落,如果不遵循該原則,則引入的對(duì)象不僅需要實(shí)現(xiàn)類a需要的方法荞下,同樣需要實(shí)現(xiàn)類a不需要的方法伶选,此時(shí)增加了代碼冗余,需要對(duì)以來的接口進(jìn)行分割尖昏,將需要的方法和不需要的方法分成兩個(gè)新的接口仰税,實(shí)現(xiàn)接口隔離。

6抽诉、最少知識(shí)原則

概念:?如果兩個(gè)類不必彼此直接通信陨簇,那么這兩個(gè)類就不應(yīng)當(dāng)直接的相互作用;如果其中一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話迹淌,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用河绽。

該處主要思想是盡量減少類與類之間的調(diào)用,包括方法的調(diào)用和屬性的調(diào)用巍沙。例如兩家店葵姥,餐飲店和奶茶店,當(dāng)顧客需要兩家的菜單時(shí)句携,應(yīng)該兩家自己提供自己的菜單榔幸,而不是奶茶店將菜單給餐飲店(餐飲店調(diào)用奶茶店的菜單),然后餐飲店一起給顧客。這里分別提供削咆,因?yàn)閺目陀^上餐飲店和奶茶店并沒有聯(lián)系牍疏,但是顧客需要菜單,因此顧客可以調(diào)用兩家的菜單拨齐。

遵守該原則鳞陨,可以較少兩個(gè)類的耦合性,修改其中一個(gè)類不會(huì)影響另一個(gè)類瞻惋。

7厦滤、開閉原則

概念:類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放歼狼,對(duì)修改關(guān)閉掏导。

該原則貫穿以上六個(gè)原則,以上六個(gè)原則的最終目的就是實(shí)現(xiàn)開閉原則羽峰。實(shí)現(xiàn)了開閉原則趟咆,則對(duì)于代碼維護(hù)和擴(kuò)展具有很大的好處。

四梅屉、結(jié)尾

如果在編程中可以遵守七大原則值纱,則程序的可維護(hù)性和可擴(kuò)展性可以大大提高。同時(shí)坯汤,設(shè)計(jì)模式還有23種經(jīng)典模式虐唠,經(jīng)典的模式是實(shí)現(xiàn)七大原則的經(jīng)典方法,是前人經(jīng)驗(yàn)的總結(jié)和智慧的結(jié)晶玫霎,如果可以好好禮用凿滤,可以進(jìn)一步提高程序的可維護(hù)性和可擴(kuò)展性。

我覺得一開始可以只接觸遵守七大原則庶近,不需要盲目追求23種設(shè)計(jì)模式翁脆,當(dāng)對(duì)于七大原則有較好的理解并使用時(shí),可以再進(jìn)一步學(xué)習(xí)經(jīng)典的設(shè)計(jì)模式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狗唉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罢缸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件投队,死亡現(xiàn)場(chǎng)離奇詭異枫疆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)敷鸦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門息楔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寝贡,“玉大人,你說我怎么就攤上這事值依∑耘荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵愿险,是天一觀的道長(zhǎng)颇蜡。 經(jīng)常有香客問我,道長(zhǎng)辆亏,這世上最難降的妖魔是什么风秤? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮扮叨,結(jié)果婚禮上唁情,老公的妹妹穿的比我還像新娘。我一直安慰自己甫匹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布惦费。 她就那樣靜靜地躺著兵迅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薪贫。 梳的紋絲不亂的頭發(fā)上恍箭,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音瞧省,去河邊找鬼扯夭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鞍匾,可吹牛的內(nèi)容都是我干的交洗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼橡淑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼构拳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梁棠,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤置森,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后符糊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凫海,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年男娄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了行贪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漾稀。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瓮顽,靈堂內(nèi)的尸體忽然破棺而出县好,到底是詐尸還是另有隱情,我是刑警寧澤暖混,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布缕贡,位于F島的核電站,受9級(jí)特大地震影響拣播,放射性物質(zhì)發(fā)生泄漏晾咪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一贮配、第九天 我趴在偏房一處隱蔽的房頂上張望谍倦。 院中可真熱鬧,春花似錦泪勒、人聲如沸昼蛀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叼旋。三九已至,卻和暖如春沦辙,著一層夾襖步出監(jiān)牢的瞬間夫植,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工油讯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留详民,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓陌兑,卻偏偏與公主長(zhǎng)得像沈跨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诀紊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355