2018-11-21

之前一直斷斷續(xù)續(xù)的在看《設(shè)計模式之禪》蒸绩,但是一段時間不接觸便漸漸對一些概念性的東西模糊了头滔,再回過頭看來則會耗時耗力账千,畢竟設(shè)計模式這種東西猶如滴水穿石需持之以恒贝次,結(jié)合實(shí)際開發(fā)才能慢慢的爛熟于心成洗,所以決定將常用設(shè)計模式的精華部分摘記下來五督。下面以設(shè)計模式的六大原則開始,一一記之瓶殃,后面會根據(jù)筆記作一個目錄匯總充包。

設(shè)計模式中六大原則

  • 開閉原則(OCP)

  • 職責(zé)單一原則(SRP)

  • 里氏替換原則(LSP)

  • 依賴倒置原則(DIP)

  • 接口隔離原則(ISP)

  • 合成復(fù)用原則(CRP)

  • 迪米特法則(LOD)

Open Close Principle

OCP原則(開閉原則):一個軟件實(shí)體如類、模塊和函數(shù)等應(yīng)該對拓展開發(fā)碌燕,對修改關(guān)閉误证。

注意

開閉原則對拓展開放,對修改關(guān)閉修壕,并不意味這不做任何的修改愈捅,低層次模塊的變化,必然要有高層模塊進(jìn)行耦合慈鸠,否則就是一個孤立無意義的代碼片段蓝谨。

在業(yè)務(wù)規(guī)則改變的情況下高層模塊必須有部分改變以適應(yīng)新業(yè)務(wù),改變要盡量地少青团,防止變化風(fēng)險的擴(kuò)散譬巫。 -秦小波 《設(shè)計模式之禪》


Single Responsibility Principle

SRP原則(職責(zé)單一原則):應(yīng)該有且只有一個原因引起類的變更。

注意

單一原則的職責(zé)劃分需要根據(jù)具體場景和項目業(yè)務(wù)邏輯來進(jìn)行判斷督笆。


Liskov Substitution Principle

OCP原則(里氏替換原則):所有引用基類的地方必須能透明地使用其子類的對象芦昔。

通俗點(diǎn)講:只要父類能出現(xiàn)的地方子類就可以出現(xiàn),而且替換為子類也不產(chǎn)生任何異常錯誤娃肿,反之則不然咕缎。這主要體現(xiàn)在,我們經(jīng)常使用抽象類/基類做為方法參數(shù)料扰,具體使用哪個子類作為參數(shù)傳入進(jìn)去凭豪,由調(diào)用者決定。

通俗點(diǎn)講晒杈,該原則包含以下幾點(diǎn)要素

  • 子類必須完全實(shí)現(xiàn)父類的方法

  • 子類可以有自己獨(dú)有的屬性和方法

  • 覆蓋或者實(shí)現(xiàn)父類方法時嫂伞,參數(shù)可以被放大。即父類的某個方法參數(shù)為HashMap時,子類參數(shù)可以是HashMap帖努,也可以是Map或者更大

  • 覆蓋或者實(shí)現(xiàn)父類的方法時撰豺,返回結(jié)果可以被縮小。即父類的某個方法返回類型是Map拼余,子類可以是Map郑趁,也可以是HashMap或者更小


Dependence Inversion Principle

DIP原則(依賴倒置原則):抽象不應(yīng)該依賴具體細(xì)節(jié),而應(yīng)該具體細(xì)節(jié)依賴于抽象姿搜,高層模塊不應(yīng)該依賴底層模塊。

  • 底層模塊:不可分割的原子邏輯就是低層模塊

  • 高層模塊:低層模塊的組裝合成后就是高層模塊

  • 抽象:Java中體現(xiàn)為基類捆憎、抽象類舅柜、接口,而不單指抽象類

  • 細(xì)節(jié):體現(xiàn)為子類躲惰、實(shí)現(xiàn)類

通俗點(diǎn)講致份,該原則包含以下幾點(diǎn)要素

  • 模塊間的依賴應(yīng)該通過抽象發(fā)生,具體實(shí)現(xiàn)類之間不應(yīng)該建立依賴關(guān)系

  • 接口或者抽象類不依賴于實(shí)現(xiàn)類础拨,否則就失去了抽象的意義

  • 實(shí)現(xiàn)類依賴于接口或者抽象類

  • 修改properties等文本配置文件氮块,不破壞依賴倒置原則

總結(jié)起來,一句話:“面向接口編程”诡宗。


Interface-Segregation Principle

ISP原則(接口隔離原則):客戶端不依賴它不需要的接口滔蝉;類間的依賴應(yīng)該建立在最小的接口。

通俗點(diǎn)講:使用接口時應(yīng)該建立單一接口塔沃,不要建立臃腫龐大的接口蝠引,盡量給調(diào)用者提供專門的接口,而非多功能接口蛀柴。(類似職責(zé)單一原則螃概,一個接口負(fù)責(zé)單個模塊或業(yè)務(wù))


Composite Reuse Principle

CRP原則(合成復(fù)用原則):盡量使用對象組合,而不是繼承來達(dá)到復(fù)用的目的鸽疾。合成復(fù)用原則又稱為組合/聚合復(fù)用原則吊洼。


Low of Demeter

LOD法則(迪米特法則):又稱最小知識原則(Least Knowledge Principle,LKP),一個對象應(yīng)該對其他對象有最少的了解。

該原則包含以下幾點(diǎn)要素
  • 只和朋友類交流:只耦合該耦合的類

  • 朋友間也是有距離的:減少不該public的方法制肮,向外提供一個簡潔的訪問

  • 自家的方法就自己創(chuàng)建:只要該方法不會增加內(nèi)部的負(fù)擔(dān)冒窍,也不會增加類間耦合

通俗點(diǎn)講:一個類應(yīng)該對自己需要耦合或者調(diào)用的類知道越少越好,被耦合或者調(diào)用的類內(nèi)部和我沒有關(guān)系弄企,我不需要的東西你就別public了吧超燃。

七種常用面向?qū)ο笤O(shè)計原則,如下表所示:

設(shè)計原則名稱 定 義 使用頻率
單一職責(zé)原則 (Single Responsibility Principle, SRP) 一個類只負(fù)責(zé)一個功能領(lǐng)域中的相應(yīng)職責(zé) ★★★★☆
開閉原則 (Open-Closed Principle, OCP) 軟件實(shí)體應(yīng)對擴(kuò)展開放拘领,而對修改關(guān)閉 ★★★★★
里氏代換原則 (Liskov Substitution Principle, LSP) 所有引用基類對象的地方能夠透明地使用其子類的對象 ★★★★★
依賴倒轉(zhuǎn)原則 (Dependence Inversion Principle, DIP) 抽象不應(yīng)該依賴于細(xì)節(jié)意乓,細(xì)節(jié)應(yīng)該依賴于抽象 ★★★★★
接口隔離原則 (Interface Segregation Principle, ISP) 使用多個專門的接口,而不使用單一的總接口 ★★☆☆☆
合成復(fù)用原則 (Composite Reuse Principle, CRP) 盡量使用對象組合,而不是繼承來達(dá)到復(fù)用的目的 ★★★★☆
迪米特法則 (Law of Demeter, LoD) 一個軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用 ★★★☆☆
本文章做筆記之用届良,本文出處:作者xiong_it 笆凌,地址:http://blog.csdn.net/xiong_it
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市士葫,隨后出現(xiàn)的幾起案子乞而,更是在濱河造成了極大的恐慌,老刑警劉巖慢显,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爪模,死亡現(xiàn)場離奇詭異,居然都是意外死亡荚藻,警方通過查閱死者的電腦和手機(jī)屋灌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來应狱,“玉大人共郭,你說我怎么就攤上這事〖采耄” “怎么了除嘹?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岸蜗。 經(jīng)常有香客問我尉咕,道長,這世上最難降的妖魔是什么散吵? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任龙考,我火速辦了婚禮,結(jié)果婚禮上矾睦,老公的妹妹穿的比我還像新娘晦款。我一直安慰自己,他們只是感情好枚冗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布缓溅。 她就那樣靜靜地躺著,像睡著了一般赁温。 火紅的嫁衣襯著肌膚如雪坛怪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天股囊,我揣著相機(jī)與錄音袜匿,去河邊找鬼。 笑死稚疹,一個胖子當(dāng)著我的面吹牛居灯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼怪嫌,長吁一口氣:“原來是場噩夢啊……” “哼义锥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岩灭,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤拌倍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后噪径,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柱恤,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年找爱,在試婚紗的時候發(fā)現(xiàn)自己被綠了膨更。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡缴允,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珍德,到底是詐尸還是另有隱情练般,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布锈候,位于F島的核電站薄料,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泵琳。R本人自食惡果不足惜摄职,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望获列。 院中可真熱鬧谷市,春花似錦、人聲如沸击孩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巩梢。三九已至创泄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間括蝠,已是汗流浹背鞠抑。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忌警,地道東北人搁拙。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親感混。 傳聞我的和親對象是個殘疾皇子端幼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348