設(shè)計(jì)模式之——六個(gè)“設(shè)計(jì)原則”

前言:
最近在看設(shè)計(jì)模式颓影,本文僅作為第一次學(xué)習(xí)設(shè)計(jì)模式的筆記各淀。
僅作為學(xué)習(xí)參考。如有不足诡挂,希望各位大神能指出碎浇,我修改临谱。

另外,所有的設(shè)計(jì)原則不是絕對(duì)的奴璃,要根據(jù)實(shí)際項(xiàng)目作出相應(yīng)的妥協(xié)和調(diào)整才能達(dá)到最好的效果悉默。
本文僅說(shuō)明理論,具體的 需要“代碼量的積累”和“寫前的思考” 才能實(shí)現(xiàn)苟穆。

1. 單一職責(zé)原則:SRP


  • 定義:應(yīng)該有且僅有一個(gè)原因引起類的變更抄课。
    即 “一個(gè)職責(zé)一個(gè)接口”。
    職責(zé)分明雳旅,結(jié)構(gòu)清晰跟磨。

  • 例如:用戶的屬性和用戶的行為,需要分開寫成兩個(gè)接口岭辣。
    一個(gè)為用戶的行為吱晒,一個(gè)為用戶的屬性。

  • 原話:There should never be more than one reason for a class to change.

  • 好處:

  1. 降低類的復(fù)雜性
  2. 可讀性提高
  3. 可維護(hù)性提高
  4. 耦合性降低沦童,變更引起的風(fēng)險(xiǎn)降低

2. 里氏替換原則:LSP


  • 定義:只要父類能出現(xiàn)的地方子類就可以出現(xiàn)仑濒。
    其中包括4層:
    1.子類必須完全實(shí)現(xiàn)父類的方法
    2.子類可以有自己的個(gè)性
    3.覆蓋或?qū)崿F(xiàn)父類的方法時(shí)輸入?yún)?shù)可以被放大
    4.覆寫或?qū)崿F(xiàn)父類的方法時(shí)輸出結(jié)果可以被縮小

  • 目的:增加程序的健壯性,添加子類偷遗,原有子類還可以繼續(xù)運(yùn)行墩瞳。
    傳遞不同的子類完成不同的業(yè)務(wù)邏輯。

3. 依賴倒置原則:DIP


  • 含義:
    1.高層模塊不能依賴底層模塊氏豌,模塊都應(yīng)該依賴其抽象
    2.抽象不應(yīng)該依賴細(xì)節(jié)
    3.細(xì)節(jié)應(yīng)該依賴抽象

  • 實(shí)現(xiàn):
    1.模塊間依賴抽象喉酌,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系通過(guò)接口或抽象類產(chǎn)生的
    2.接口或抽象類不依賴于實(shí)現(xiàn)類
    3.實(shí)現(xiàn)類依賴接口或抽象類

  • 好處:減少類間的耦合性泵喘,提高系統(tǒng)的穩(wěn)定性泪电,降低并行開發(fā)引起的風(fēng)險(xiǎn),提高代碼的可讀性和可維護(hù)性纪铺。

  • 寫法:如何模板依賴抽象相速?
    1.構(gòu)造函數(shù)傳遞依賴對(duì)象
    2.Setter方法傳遞依賴對(duì)象
    3.接口聲明依賴對(duì)象

  • 最佳實(shí)踐:
    1.每個(gè)類盡量都有抽象類或接口
    2.變量的表面類型盡量是接口或者是抽象類
    3.任何類都不應(yīng)該從具體類派生
    4.盡量不要覆寫基類的方法

4. 接口隔離原則:ISP


  • 定義:客戶端應(yīng)僅依賴它需要的接口
    1.客戶端不應(yīng)該依賴它不需要的接口
    2.類間的依賴關(guān)系應(yīng)該建立在最小的接口上

  • 寫法:
    1.接口要盡量小,職責(zé)單一鲜锚,符合單一職責(zé)突诬。
    2.通過(guò)業(yè)務(wù)邏輯壓縮接口中的public方法(滿身筋骨肉)

  • 最佳實(shí)踐:
    1.一個(gè)接口只服務(wù)于一個(gè)子模塊(業(yè)務(wù)邏輯)
    2.通過(guò)業(yè)務(wù)邏輯壓縮接口中的public方法(滿身筋骨肉)
    3.已經(jīng)污染了的接口,盡量去修改芜繁,風(fēng)險(xiǎn)大用適配器模式旺隙。

5. 迪米特法則:LoD


又叫“最小知識(shí)原則”

  • 定義:一個(gè)對(duì)象應(yīng)該對(duì)其他的對(duì)象有最少的了解。
    即 一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少骏令。

  • 四層含義:
    1.只與直接的朋友交流
    2.朋友間也是有距離的
    3.是自己的就是自己的
    4.謹(jǐn)慎使用Serializable

  • 寫法:編寫時(shí) 反復(fù)斟酌:
    1.是否可以減少public的方法和屬性
    2.是否可以加上private蔬捷、protected、package-private
    3.是否可以加上final(防止被繼承)

6. 開閉原則:OCP


原話:Software entities like classes,modules and functions should be open for extendsion but closed for modifications.
直譯:軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開放伏社,對(duì)修改關(guān)閉抠刺。
實(shí)體包括:邏輯模塊塔淤、抽象和類、方法

  • 定義:開閉原則是對(duì)前5個(gè)原則的總結(jié)速妖,前五個(gè)原則對(duì)開閉原則的具體解釋高蜂。

  • 寫法:
    1.抽象約束
    2.元數(shù)據(jù)(配置參數(shù),來(lái)源于數(shù)據(jù)庫(kù)罕容、本地文件)控制子模塊
    3.指定項(xiàng)目章程
    4.封裝變化

  • 好處:
    1.減少測(cè)試壓力
    2.提高代碼復(fù)用性
    3.提高項(xiàng)目可維護(hù)性
    4.面向?qū)ο箝_發(fā)的要求

開閉原則是項(xiàng)目的最終目標(biāo)备恤,不可能百分百做到,但朝著這個(gè)方向努力锦秒,可以改善架構(gòu)露泊,永遠(yuǎn)擁抱‘變化”,百變我不怕旅择。

作為一名 95后 程序員小白惭笑,
第一次投稿還是有點(diǎn)緊張呢。生真。
如果哪里有異議沉噩,希望各位大神指出,我修改柱蟀。
哈哈哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末川蒙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子长已,更是在濱河造成了極大的恐慌畜眨,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件术瓮,死亡現(xiàn)場(chǎng)離奇詭異康聂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)胞四,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門早抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人撬讽,你說(shuō)我怎么就攤上這事⌒” “怎么了游昼?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尝蠕。 經(jīng)常有香客問(wèn)我烘豌,道長(zhǎng),這世上最難降的妖魔是什么看彼? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任廊佩,我火速辦了婚禮囚聚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘标锄。我一直安慰自己顽铸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布料皇。 她就那樣靜靜地躺著谓松,像睡著了一般。 火紅的嫁衣襯著肌膚如雪践剂。 梳的紋絲不亂的頭發(fā)上鬼譬,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音逊脯,去河邊找鬼优质。 笑死,一個(gè)胖子當(dāng)著我的面吹牛军洼,可吹牛的內(nèi)容都是我干的巩螃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼歉眷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牺六!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起汗捡,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淑际,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扇住,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體春缕,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年艘蹋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锄贼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡女阀,死狀恐怖宅荤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浸策,我是刑警寧澤冯键,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站庸汗,受9級(jí)特大地震影響惫确,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一改化、第九天 我趴在偏房一處隱蔽的房頂上張望掩蛤。 院中可真熱鬧,春花似錦陈肛、人聲如沸揍鸟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜈亩。三九已至,卻和暖如春前翎,著一層夾襖步出監(jiān)牢的瞬間稚配,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工港华, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留道川,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓立宜,卻偏偏與公主長(zhǎng)得像冒萄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子橙数,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 轉(zhuǎn)載標(biāo)注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設(shè)計(jì)模式六...
    Bloo_m閱讀 706評(píng)論 0 7
  • 設(shè)計(jì)模式六大原則 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因尊流。通俗的說(shuō),即一個(gè)類...
    viva158閱讀 763評(píng)論 0 1
  • 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因灯帮。通俗的說(shuō)崖技,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)。 ...
    Jabir_Zhang閱讀 640評(píng)論 0 3
  • 設(shè)計(jì)模式之六大原則(轉(zhuǎn)載) 關(guān)于設(shè)計(jì)模式的六大設(shè)計(jì)原則的資料網(wǎng)上很多...
    霄霄霄霄閱讀 894評(píng)論 0 1
  • 前言 設(shè)計(jì)模式六大原則網(wǎng)上資料比較多比較亂钟哥,本文將網(wǎng)上的一些好的資料做一下整理迎献,以便隨時(shí)翻閱。友情提示腻贰,設(shè)計(jì)模式雖...
    簡(jiǎn)單的土豆閱讀 1,428評(píng)論 0 10