SOLID 軟件設計原則

什么是軟件設計原則?

軟件設計原則是一組幫助我們避開不良設計的指導方針。這些設計原則是由 Robert Martin 在《敏捷軟件開發:原則、模式與實踐》一書中整理收集而來。 根據 Robert Martin 的理論,應該避免不良設計的以下三個重要特點:

  • 僵化: 很難做改動,因為每一個細微的改動都會影響到系統大量的其他功能
  • 脆弱: 每當你做一次改動,總會引起系統中預期之外的部分出現故障
  • 死板: 代碼很難在其他應用中重用,因其不能從當前應用中單獨抽離出來

開放-關閉原則 Open Close Principle

軟件實體,如類、模塊和函數,應該對擴展開放,對修改關閉。

OPC 是一個通用原則。 你可以在這種情景下考慮此原則:當你構建類的時候,你想要確保以后你要擴展類行為時只需擴展它而不需要修改原類。這原則同樣適用于模塊、包和代碼庫。如果你手頭一個包含多個類的代碼庫,大多數情況下你更愿意去擴展它,也不想去修改已有的代碼(向后兼容,回歸測試等)。 這就是為什么我們必須確保我們的模塊遵循開放-關閉原則的原因。
當提及類時,開放-關閉原則可以通過使用抽象類+實現類來實現他們的行為。這會強制使用具體實現類來擴展抽象類而不去修改抽象類。具體的實例有:模版模式、策略模式。

依賴倒置原則 Dependency Inversion Principle

高層次的模塊不應該依賴低層次的模塊。雙方都應該依賴抽象。

抽象不應該依賴具體細節。細節應該依賴抽象。

依賴倒置原則強調:我們應在高低層次的類之間引入一個抽象層來解耦高層次模塊和低層次模塊。此外,此原則顛倒了依賴關系:它認為我們應該基于抽象來編寫具體的實現,而不基于具體實現來編寫抽象。
當談及依賴關系的實現時,我們經常聽到的是依賴倒置 (DI) 或者控制反轉 (IOC) 。一個軟件模塊(類,框架等)依賴其他模塊時,經典的做法是初始化并持有該模塊的直接引用。這種做法導致兩個模塊的強耦合。為了解耦兩者,第一個模塊提供一個鉤子(一個屬性,參數,其他),然后一個專門管理依賴關系的外部模塊將第二個模塊的引用注入到第一個模塊的鉤子上。
通過使用依賴倒置原則,只需要修改依賴管理模塊,被依賴模塊就可以很容易的替換成其他模塊。工廠模式和抽象工廠模式可以作為框架管理依賴,不過,有專門的框架來做這件事,稱之為控制反轉容器(Invertion Of Control Container)。

接口隔離原則Interface Segregation Principle

客戶端不應該被強制依賴他們不需要使用的接口

這個原則教導要我們小心對待我們編寫的接口。編寫接口時,我們必須注意只增加應該在其職責范圍內的方法。如果我們增加了不應該出現在接口功能范圍內的方法,那么實現此接口的類將不得不實現也那些方法。比如說,我們建了個名為 Worker 的接口,然后增加了個 lunch-break 的方法,那么所有的 Workers 都得實現它。如果有個 Worker 是機器人怎么辦?機器人應該不用午休吧。

總而言之,如果一個接口包含了不是針對其意圖的方法,那么這個接口就是被污染了或者叫“肥”接口。 應該避免這些非領域內的方法。

單一職責原則 Single Responsibility Principle

一個類,應該只有一個需要進行修改的原因。

關于這點,職責被認為是一個修改的原因。這個原則強調,如果我們基于2個不同的原因去修改一個類,那么我們應該將其功能拆分到2個類中。每個類僅僅負責一個功能。如果日后我需要做一次修改,我們只需修改負責該功能的類就可以了。當我們在同時負責多個功能的類上做一個修改時,可能會影響到其他的功能。
單一職責原則是Tom DeMarco于1979年在他的書《Structure Analysis and System Specification》中提出的。Robert Martin重新解釋并將職責(功能)定義為變化的原因。

里氏替換原則 Liskov's Substitution Principle

派生類型必須能被其基類完全代替

此原則是在開放-關閉原則在行為方面的延伸,其意味著我們必須確新的派生類擴展基類的同時不能修改其行為。新創建的派生類應該能夠替換基類而不用修改任何代碼。
里氏替換原則是 Barbara Liskov 于1987年在 “面向對象編程語言系統和應用程序” 大會上提出的, 具體可看 data abstraction and hiearchy

如何應用設計原則 摘自《面向對象葵花寶典》

OCP 原則: 總的指導思想

OCP 原則是一個總的指導思想,在面向對象的設計中,如果能夠符合 LSP/ISP/DIP 原則,一般情況下就能夠符合 OCP 原則了。

除了在面向對象的軟件設計中應用外,OCP 也可以用于指導系統架構設計,例如常見的 CORBA、COM 協議,其實可都可以認為是 OCP 原則的具體應用和實現。

SRP 原則: 用于類的設計

當我們想出一個類,或者設計出一個類的原型后,使用 SRP 原則核對類的設計是否符合 SRP 要求。

LSP 原則: 用于指導類繼承的設計

當我們設計類之間的繼承關系時,使用 LSP 原則來判斷這種繼承關系是否符合 LSP 要求。

ISP 原則: 用于指導接口的設計

ISP 原則可以認為是 SRP 原則的一個變種,本質上是和 SRP 的思想是一樣的。 SRP 用于指導類的設計,而 ISP 用于指導接口的設計

DIP 原則: 用于指導如何抽象

當我們設計類之間的依賴關系時,可以使用 DIP 原則來判斷這種依賴是否符合 DIP 原則二。 DIP 原則 和 LSP 原則相輔相成: DIP 原則用于指導抽象出接口或者抽象類,而 LSP 原則用于指導從接口或者抽象類派生出新的子類。

目錄: http://www.lxweimin.com/p/af861220a6cc

jdk中的設計模式: http://www.lxweimin.com/p/734c62d1fb3d

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容