設(shè)計模式之軟件設(shè)計七大原則

點關(guān)注外遇,不迷路注簿;持續(xù)更新Java架構(gòu)相關(guān)技術(shù)及資訊熱文!L隆诡渴!

1.開閉原則

  • 定義:一個軟件實體如類,模塊和函數(shù)應(yīng)該對擴展開放菲语,對修改關(guān)閉
  • 要點
    • 當(dāng)變更發(fā)生時妄辩,不要直接修改類惑灵,而是通過繼承擴展的方式完成變更
    • 用抽象構(gòu)建框架,用實現(xiàn)擴展細節(jié)
    • 預(yù)先設(shè)計好抽象
  • 優(yōu)點:提高軟件系統(tǒng)的可復(fù)用性及可維護性
  • 面向抽象編程眼耀,實現(xiàn)抽象化英支,抽象出業(yè)務(wù)模型
  • 提高內(nèi)聚,降低耦合

2.依賴倒置原則

  • 定義:高層模塊不應(yīng)該依賴低層模塊哮伟,二者都應(yīng)該依賴其抽象
    • 這個設(shè)計原則比較好理解干花,首先高層模塊只接口或者父類,接口或父類不該依賴其派生子類
  • 抽象不應(yīng)該依賴細節(jié)楞黄;細節(jié)應(yīng)該依賴抽象池凄。
  • 針對接口編程,不要針對實現(xiàn)編程鬼廓。
  • 優(yōu)點:可以減少類間的耦合性修赞,提高系統(tǒng)穩(wěn)定性,提高代碼可讀性和可維護性桑阶,可降低修改程序所造成的風(fēng)險

3.單一職責(zé)原則

  • 定義:不要存在多余一個導(dǎo)致類變更的原因柏副,就一個類而言,應(yīng)該只存在一個導(dǎo)致其變更的原因蚣录。
  • 一個類/接口/方法只負責(zé)一項職責(zé)
  • 降低類的復(fù)雜度割择,提高類的可讀性,提高系統(tǒng)的可維護性萎河,降低變更引起的風(fēng)險

4.接口隔離原則

  • 用多個專門的接口荔泳,而不是使用單一的總接口,客戶端不應(yīng)該依賴它不需要的接口
  • 一個類對一個類的依賴應(yīng)該建立在最小的接口上
  • 建立單一接口虐杯,不要建立龐大臃腫的接口
  • 盡量細化接口玛歌,接口中的方法盡量少
  • 注意適度原則,一定要適度擎椰,否則會造成類爆炸
  • 優(yōu)點:符合我們常說的高內(nèi)聚低耦合的設(shè)計思想支子,從而使類具有很好的可讀性,可擴展性和可維護性

5.迪米特法則(最少知道原則)

  • 定義:一個對象應(yīng)該對其他對象保持最少的了解达舒。又叫最少知道原則
  • 盡量降低類與類之間的耦合
  • 降低類之間的耦合
  • 強調(diào)只和朋友交流值朋,不和陌生人說話
  • 朋友:出現(xiàn)在成員變量,方法的輸入巩搏,輸出參數(shù)中的類稱為成員朋友類昨登,而出現(xiàn)在方法體內(nèi)部的類不屬于朋友類。
  • 類與類之間的引用贯底,盡量只是直接關(guān)系的引用丰辣,避免不必要的耦合。

6.里氏替換原則

  • 定義:如果對每一個類型為T1的對象o1,都有類型為T2的對象o2笙什,使得以T1定義的所有程序P在所有的對象o1都替換成o2時飘哨,程序P的行為沒有發(fā)生變化,那么類型T2是類型T1的子類型得湘。
  • 定義擴展:一個軟件實體如果適用一個父類的話杖玲,那一定適用于其子類顿仇,所有引用父類的地方必須能透明的使用其子類的對象淘正,子類對象能夠替換父類對象,而程序邏輯不變臼闻。
  • 引申意義:子類可以擴展父類的功能鸿吆,但不能改變父類原有的功能。
    • 含義1:子類可以實現(xiàn)父類的抽象方法述呐,但不能覆蓋父類的非抽象方法
    • 含義2:子類中可以增加自己特有的方法
    • 含義3:當(dāng)子類的方法重載父類的方法時惩淳,方法的前置條件(即方法的輸入/入?yún)ⅲ┮雀割惙椒ǖ妮斎雲(yún)?shù)更寬松。
    • 含義4:當(dāng)子類的方法實現(xiàn)父類的方法時(重寫/重載或?qū)崿F(xiàn)抽象方法)乓搬,方法的后置條件(即方法的輸出/返回值)要比父類更嚴(yán)格或相等思犁。
  • 優(yōu)點1:約束繼承泛濫,開閉原則的一種體現(xiàn)进肯。
  • 優(yōu)點2:加強程序的健壯性激蹲,同事變更時也可以做到非常好的兼容性,提高程序的維護性江掩、擴展性学辱。降低需求變更時引入的風(fēng)險。

7.合成/復(fù)用原則(組合/復(fù)用原則)

  • 定義:盡量適用對象組合/聚合环形,而不是繼承關(guān)系達到軟件復(fù)用的目的
  • 聚合has-A和組合contains-A
  • 優(yōu)點:可以適用系統(tǒng)更加靈活策泣,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少
  • 何時適用合成/聚合抬吟,繼承
  • 聚合has-A, 組合contains-A, 繼承 is-A
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萨咕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子火本,更是在濱河造成了極大的恐慌任洞,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件发侵,死亡現(xiàn)場離奇詭異交掏,居然都是意外死亡,警方通過查閱死者的電腦和手機刃鳄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門盅弛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事挪鹏〖啵” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵讨盒,是天一觀的道長解取。 經(jīng)常有香客問我,道長返顺,這世上最難降的妖魔是什么禀苦? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮遂鹊,結(jié)果婚禮上振乏,老公的妹妹穿的比我還像新娘。我一直安慰自己秉扑,他們只是感情好慧邮,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舟陆,像睡著了一般误澳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秦躯,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天忆谓,我揣著相機與錄音,去河邊找鬼宦赠。 笑死陪毡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勾扭。 我是一名探鬼主播毡琉,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妙色!你這毒婦竟也來了桅滋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤身辨,失蹤者是張志新(化名)和其女友劉穎丐谋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煌珊,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡号俐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了定庵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吏饿。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡踪危,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猪落,到底是詐尸還是另有隱情贞远,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布笨忌,位于F島的核電站蓝仲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏官疲。R本人自食惡果不足惜袱结,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袁余。 院中可真熱鬧擎勘,春花似錦咱揍、人聲如沸颖榜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掩完。三九已至,卻和暖如春硼砰,著一層夾襖步出監(jiān)牢的瞬間且蓬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工题翰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恶阴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓豹障,卻偏偏與公主長得像冯事,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子血公,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • 設(shè)計模式基本原則 開放-封閉原則(OCP)昵仅,是說軟件實體(類、模塊累魔、函數(shù)等等)應(yīng)該可以拓展摔笤,但是不可修改。開-閉原...
    西山薄涼閱讀 3,777評論 3 14
  • 目錄: 設(shè)計模式六大原則(1):單一職責(zé)原則 設(shè)計模式六大原則(2):里氏替換原則 設(shè)計模式六大原則(3):依賴倒...
    加油小杜閱讀 724評論 0 1
  • 設(shè)計模式六大原則 設(shè)計模式六大原則(1):單一職責(zé)原則 定義:不要存在多于一個導(dǎo)致類變更的原因垦写。通俗的說吕世,即一個類...
    viva158閱讀 765評論 0 1
  • 轉(zhuǎn)載標(biāo)注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設(shè)計模式六...
    Bloo_m閱讀 707評論 0 7
  • 一直在思考一個問題:自己是否應(yīng)該辭職。就算昨晚朋友再次讓我考慮是否要和他一起創(chuàng)業(yè)時梯投,我依舊還是沒有個答案∶ぴ鳎現(xiàn)在就把...
    古月文靜閱讀 976評論 1 0