JAVA開發(fā)六大設計原則(SOLID)

引用一位10年Java工作經驗的架構師聊Java和工作經驗

1.單一職責原則(Single?Responsibility?Principle?-?SRP)

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

譯文:永遠不應該有多于一個原因來改變某個類。

理解:對于一個類而言实昨,應該僅有一個引起它變化的原因衅枫。說白了就是稚照,不同的類具備不同的職責唠椭,各施其責描孟。這就好比一個團隊益兄,大家分工協(xié)作戒洼,互不影響,各做各的事情枢劝。

應用:當我們做系統(tǒng)設計時井联,如果發(fā)現(xiàn)有一個類擁有了兩種的職責,那就問自己一個問題:可以將這個類分成兩個類嗎您旁?如果真的有必要烙常,那就分吧。千萬不要讓一個類干的事情太多鹤盒!

2.開放封閉原則(Open?Closed?Principle?-?OCP)

原文:Software?entities?like?classes,?modules?and?functions?should?be?open?for?extension?but?closed?for?modifications.

譯文:軟件實體蚕脏,如:類侦副、模塊與函數(shù),對于擴展應該是開放的驼鞭,但對于修改應該是封閉的秦驯。

理解:簡言之,對擴展開放挣棕,對修改封閉译隘。換句話說,可以去擴展類穴张,但不要去修改類细燎。

應用:當需求有改動两曼,要修改代碼了皂甘,此時您要做的是,盡量用繼承或組合的方式來擴展類的功能悼凑,而不是直接修改類的代碼偿枕。當然,如果能夠確保對整體架構不會產生任何影響户辫,那么也沒必要搞得那么復雜了渐夸,直接改這個類吧。

3.里氏替換原則(Liskov?Substitution?Principle?-?LSP)

原文:Functions?that?use?pointers?or?references?to?base?classes?must?be?able?to?use?objects?of?derived?classes?without?knowing?it.

譯文:使用基類的指針或引用的函數(shù)渔欢,必須是在不知情的情況下墓塌,能夠使用派生類的對象。

理解:父類能夠替換子類奥额,但子類不一定能替換父類苫幢。也就是說,在代碼中可以將父類全部替換為子類垫挨,程序不會報錯韩肝,也不會在運行時出現(xiàn)任何異常,但反過來卻不一定成立九榔。

應用:在繼承類時哀峻,務必重寫(Override)父類中所有的方法,尤其需要注意父類的?protected?方法(它們往往是讓您重寫的)哲泊,子類盡量不要暴露自己的?public?方法供外界調用剩蟀。

該原則由麻省理工學院的?Barbara?Liskov?女士提出,她是美國第一位獲取計算機博士學位的女性切威,曾經也獲得過計算機圖靈獎喻旷。

4.最少知識原則(Least?Knowledge?Principle?-?LKP)

原文:Only?talk?to?you?immediate?friends.

譯文:只與你最直接的朋友交流。

理解:盡量減少對象之間的交互牢屋,從而減小類之間的耦合且预。簡言之槽袄,一定要做到:低耦合,高內聚锋谐。

應用:在做系統(tǒng)設計時遍尺,不要讓一個類依賴于太多的其他類,需盡量減小依賴關系涮拗,否則乾戏,您死都不知道自己怎么死的。

該原則也稱為“迪米特法則(Law?of?Demeter)”三热,由?Ian?Holland?提出鼓择。這個人不太愿意和陌生人說話,只和他走得最近的朋友們交流就漾。

5.接口隔離原則(Interface?Segregation?Principle?-?ISP)

原文:The?dependency?of?one?class?to?another?one?should?depend?on?the?smallest?possible?interface.

譯文:一個類與另一個類之間的依賴性呐能,應該依賴于盡可能小的接口。

理解:不要對外暴露沒有實際意義的接口抑堡。也就是說摆出,接口是給別人調用的,那就不要去為難別人了首妖,盡可能保證接口的實用性吧偎漫。她好,我也好有缆。

應用:當需要對外暴露接口時象踊,需要再三斟酌,如果真的沒有必要對外提供的棚壁,就刪了吧杯矩。一旦您提供了,就意味著灌曙,您將來要多做一件事情菊碟,何苦要給自己找事做呢。

6.?依賴倒置原則(Dependence?Inversion?Principle?-?DIP)

原文:High?level?modules?should?not?depends?upon?low?level?modules.?Both?should?depend?upon?abstractions.?Abstractions?should?not?depend?upon?details.?Details?should?depend?upon?abstractions.

譯文:高層模塊不應該依賴于低層模塊在刺,它們應該依賴于抽象逆害。抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象蚣驼。

理解:應該面向接口編程魄幕,不應該面向實現(xiàn)類編程。面向實現(xiàn)類編程颖杏,相當于就是論事纯陨,那是正向依賴(正常人思維);面向接口編程,相當于通過事物表象來看本質翼抠,那是反向依賴咙轩,即依賴倒置(程序員思維)。

應用:并不是說阴颖,所有的類都要有一個對應的接口活喊,而是說,如果有接口量愧,那就盡量使用接口來編程吧钾菊。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市偎肃,隨后出現(xiàn)的幾起案子煞烫,更是在濱河造成了極大的恐慌,老刑警劉巖累颂,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滞详,死亡現(xiàn)場離奇詭異,居然都是意外死亡喘落,警方通過查閱死者的電腦和手機茵宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門最冰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘦棋,“玉大人,你說我怎么就攤上這事暖哨《呐螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵篇裁,是天一觀的道長沛慢。 經常有香客問我,道長达布,這世上最難降的妖魔是什么团甲? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮黍聂,結果婚禮上躺苦,老公的妹妹穿的比我還像新娘。我一直安慰自己产还,他們只是感情好匹厘,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脐区,像睡著了一般愈诚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天炕柔,我揣著相機與錄音酌泰,去河邊找鬼。 笑死匕累,一個胖子當著我的面吹牛宫莱,可吹牛的內容都是我干的。 我是一名探鬼主播哩罪,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼授霸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了际插?” 一聲冷哼從身側響起碘耳,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎框弛,沒想到半個月后辛辨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瑟枫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年斗搞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慷妙。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡僻焚,死狀恐怖,靈堂內的尸體忽然破棺而出膝擂,到底是詐尸還是另有隱情虑啤,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布架馋,位于F島的核電站狞山,受9級特大地震影響,放射性物質發(fā)生泄漏叉寂。R本人自食惡果不足惜萍启,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屏鳍。 院中可真熱鬧勘纯,春花似錦、人聲如沸孕蝉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽降淮。三九已至超埋,卻和暖如春搏讶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霍殴。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工媒惕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人来庭。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓妒蔚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親月弛。 傳聞我的和親對象是個殘疾皇子肴盏,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,799評論 25 707
  • 起伏很多,很多東西在匯聚整合帽衙。這是多年以來菜皂,內心再次被攪動得如此厲害,像掀起了一股暗流厉萝,逐漸匯聚成波濤洶涌的巨浪恍飘,...
    沐翠微閱讀 234評論 0 1
  • 通過Xcode命令行編譯 本文檔提供命令行常提到一些問題 命令行工具是什么 命令行工具包是一個小型獨立包,可供下載...
    君賞閱讀 28,197評論 1 16