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

  • 單一職責原則(SRP):
  • 定義:就一個類而言浴鸿,應(yīng)該僅有一個引起它變化的原因
  • 闡釋:從這句定義我們很難理解它的含義井氢,通俗講就是我們不要讓一個類承擔過多的職責。如果一個類承擔的職責過多岳链,就等于把這些職責耦合在一起花竞,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設(shè)計掸哑,當變化發(fā)生時约急,設(shè)計會遭受到破壞

  • 概括:專注干一件事

  • 開放封閉原則(ASD):

  • 定義:類零远、模塊、函數(shù)等等等應(yīng)該是可以拓展的厌蔽,但是不可修改
  • 闡釋:開放封閉有兩個含義牵辣,一個是對于拓展是開放的,另一個是對于修改是封閉的躺枕。對于開發(fā)來說需求肯定是要變化的服猪,但是新需求一來,我們就要把類重新改一遍這顯然是令人頭疼的拐云,所以我們設(shè)計程序時面對需求的改變要盡可能的保證相對的穩(wěn)定,盡量用新代碼實現(xiàn)拓展來修改需求近她,而不是通過修改原有的代碼來實現(xiàn)

  • 概括:可繼承 & 不可修改

  • 里氏替換原則(LSP)

  • 定義:所有引用基類(父類)的地方必須能透明地使用其子類的對象
  • 闡釋:里氏替換原則告訴我們叉瘩,在軟件中將一個基類對象替換成它的子類對象,程序?qū)⒉粫a(chǎn)生任何錯誤和異常粘捎,反過來則不成立薇缅,如果一個軟件實體使用的是一個子類對象的話,那么它不一定能夠使用基類對象攒磨。里氏代換原則是實現(xiàn)開閉原則的重要方式之一泳桦,由于使用基類對象的地方都可以使用子類對象,因此在程序中盡量使用基類類型來對對象進行定義娩缰,而在運行時再確定其子類類型灸撰,用子類對象來替換父類對象。在使用里氏代換原則時需要注意如下幾個問題:

    • 子類的所有方法必須在父類中聲明拼坎,或子類必須實現(xiàn)父類中聲明的所有方法浮毯。根據(jù)里氏代換原則,為了保證系統(tǒng)的擴展性泰鸡,在程序中通常使用父類來進行定義债蓝,如果一個方法只存在子類中,在父類中不提供相應(yīng)的聲明盛龄,則無法在以父類定義的對象中使用該方法
    • 我們在運用里氏代換原則時饰迹,盡量把父類設(shè)計為抽象類或者接口,讓子類繼承父類或?qū)崿F(xiàn)父接口余舶,并實現(xiàn)在父類中聲明的方法啊鸭,運行時,子類實例替換父類實例欧芽,我們可以很方便地擴展系統(tǒng)的功能莉掂,同時無須修改原有子類的代碼,增加新的功能可以通過增加一個新的子類來實現(xiàn)千扔。里氏代換原則是開閉原則的具體實現(xiàn)手段之一
    • Java語言中憎妙,在編譯階段库正,Java編譯器會檢查一個程序是否符合里氏代換原則,這是一個與實現(xiàn)無關(guān)的厘唾、純語法意義上的檢查褥符,但Java編譯器的檢查是有局限的
  • 概括:定義用基類,使用用子類

  • 依賴倒置原則(DIP)

  • 定義:高層模塊不應(yīng)該依賴低層模塊抚垃,兩個都應(yīng)該依賴于抽象喷楣。抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)該依賴于抽象
  • 闡釋:在Java中鹤树,抽象就是指接口或者抽象類铣焊,兩者都是不能直接被實例化的;細節(jié)就是實現(xiàn)類罕伯,實現(xiàn)接口或者繼承抽象類而產(chǎn)生的就是細節(jié)曲伊,也就是可以加上一個關(guān)鍵字new產(chǎn)生的對象。高層模塊就是調(diào)用端追他,低層模塊就是具體實現(xiàn)類

  • 抽象設(shè)計

  • 迪米特原則(LOD)

  • 定義:一個軟件實體應(yīng)當盡可能少地與其他實體發(fā)生相互作用坟募。
    也稱為最少知識原則。
  • 闡釋:如果一個系統(tǒng)符合迪米特法則邑狸,那么當其中某一個模塊發(fā)生修改時懈糯,就會盡量少地影響其他模塊,擴展會相對容易单雾,這是對軟件實體之間通信的限制赚哗,迪米特法則要求限制軟件實體之間通信的寬度和深度。迪米特法則可降低系統(tǒng)的耦合度铁坎,使類與類之間保持松散的耦合關(guān)系

  • 概括:解耦合 & 收權(quán)限

  • 接口隔離原則(ISP)

  • 定義:一個類對另一個類的依賴應(yīng)該建立在最小的接口上
  • 闡釋:建立單一接口蜂奸,不要建立龐大臃腫的接口,盡量細化接口硬萍,接口中的方法盡量少扩所。也就是說,我們要為各個類建立專用的接口朴乖,而不要試圖去建立一個很龐大的接口供所有依賴它的類去調(diào)用祖屏。采用接口隔離原則對接口進行約束時,要注意以下幾點:
    • 接口盡量小买羞,但是要有限度袁勺。對接口進行細化可以提高程序設(shè)計靈活性,但是如果過小畜普,則會造成接口數(shù)量過多期丰,使設(shè)計復雜化。所以一定要適度
    • 為依賴接口的類定制服務(wù),只暴露給調(diào)用的類它需要的方法钝荡,它不需要的方法則隱藏起來街立。只有專注地為一個模塊提供定制服務(wù),才能建立最小的依賴關(guān)系
    • 提高內(nèi)聚埠通,減少對外交互赎离。使接口用最少的方法去完成最多的事情
  • 概括:接口粒度靈活把握
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市端辱,隨后出現(xiàn)的幾起案子梁剔,更是在濱河造成了極大的恐慌,老刑警劉巖舞蔽,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荣病,死亡現(xiàn)場離奇詭異,居然都是意外死亡喷鸽,警方通過查閱死者的電腦和手機众雷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來做祝,“玉大人,你說我怎么就攤上這事鸡岗』旎保” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵轩性,是天一觀的道長声登。 經(jīng)常有香客問我,道長揣苏,這世上最難降的妖魔是什么悯嗓? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮卸察,結(jié)果婚禮上脯厨,老公的妹妹穿的比我還像新娘。我一直安慰自己坑质,他們只是感情好合武,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涡扼,像睡著了一般稼跳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吃沪,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天汤善,我揣著相機與錄音,去河邊找鬼。 笑死红淡,一個胖子當著我的面吹牛不狮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锉屈,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荤傲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颈渊?” 一聲冷哼從身側(cè)響起遂黍,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俊嗽,沒想到半個月后雾家,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡绍豁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年芯咧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竹揍。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡敬飒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芬位,到底是詐尸還是另有隱情无拗,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布昧碉,位于F島的核電站英染,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏被饿。R本人自食惡果不足惜四康,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狭握。 院中可真熱鬧闪金,春花似錦、人聲如沸哥牍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗅辣。三九已至撼泛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澡谭,已是汗流浹背愿题。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工损俭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人潘酗。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓叔营,卻偏偏與公主長得像模孩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容