簡(jiǎn)單粗暴嗅蔬,Java設(shè)計(jì)模式六大原則的理解

六大原則

  • 單一職責(zé)原則

  • 里氏替換原則

  • 依賴倒置原則

  • 接口隔離原則

  • 迪米特原則

  • 開閉原則

單一職責(zé)

  • 概念:對(duì)功能進(jìn)行分類歌亲,代碼進(jìn)行解耦

  • 栗子:一個(gè)網(wǎng)絡(luò)請(qǐng)求框架大致分為:請(qǐng)求類菇用,緩存類,配置類陷揪;不能把這三個(gè)功能混合在一起惋鸥,必須分成三個(gè)類分別去實(shí)現(xiàn)不同的功能

里氏替換

  • 概念:在繼承類時(shí),除了擴(kuò)展一些新的功能之外悍缠,盡量不要?jiǎng)h除或者修改對(duì)父類方法的引用卦绣,也盡量不要重載父類的方法

  • 栗子:每個(gè)類都是Object的子類,Object類中有一個(gè)toString()的方法飞蚓,假如子類重寫該方法并且返回null滤港,這個(gè)子類的下一級(jí)繼承返回的都是null,那么在不同開發(fā)人員維護(hù)時(shí)可能考慮不到這個(gè)問題趴拧,并且很可能會(huì)導(dǎo)致程序崩潰

依賴倒置

  • 概念:高層模塊不依賴低層次模塊的細(xì)節(jié)溅漾,高層次就是不依賴細(xì)節(jié)而是依賴抽象(不依賴具體的類,而是依賴于接口)

  • 栗子:某個(gè)網(wǎng)絡(luò)框架為了滿足不同開發(fā)者的需求著榴,即能使用高效的OkHttp框架添履,也可以使用原生的API。正所謂蘿卜白菜各有所愛脑又,那么是如何進(jìn)行切換的呢暮胧,這個(gè)時(shí)候需要面向接口編程思想了,把一些網(wǎng)絡(luò)請(qǐng)求的方法封裝成一個(gè)接口问麸,然后分別創(chuàng)建OkHttp和原生API的接口實(shí)現(xiàn)類往衷,當(dāng)然也方便后續(xù)其他開發(fā)人員進(jìn)行擴(kuò)展其他網(wǎng)絡(luò)框架的應(yīng)用

接口隔離

  • 概念:在定義接口方法時(shí)應(yīng)該合理化,盡量追求簡(jiǎn)單最小严卖,避免接口臃腫

  • 栗子:在實(shí)際開發(fā)中席舍,往往為了節(jié)省時(shí)間,可能會(huì)將多個(gè)功能的方法抽成一個(gè)接口妄田,其實(shí)這設(shè)計(jì)理念不正確的俺亮,這樣會(huì)使接口處于臃腫的狀態(tài)驮捍,這時(shí)就需要合理的拆分接口中的方法,另外抽取成一個(gè)獨(dú)立的接口脚曾,避免原有的接口臃腫導(dǎo)致代碼理解困難

迪米特 | 最少知道

  • 概念:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解东且;一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少,類的內(nèi)部如何實(shí)現(xiàn)本讥、如何復(fù)雜都與調(diào)用者或者依賴者沒關(guān)系珊泳,調(diào)用者或者依賴者只需要知道他需要的方法即可,其他的一概不關(guān)心拷沸。類與類之間的關(guān)系越密切色查,耦合度越大,當(dāng)一個(gè)類發(fā)生改變時(shí)撞芍,對(duì)另一個(gè)類的影響也越大秧了。只與直接的朋友通信。每個(gè)對(duì)象都必然會(huì)與其他對(duì)象有耦合關(guān)系序无,兩個(gè)對(duì)象之間的耦合就成為朋友關(guān)系验毡,這種關(guān)系的類型有很多,例如組合帝嗡、聚合晶通、依賴等。

  • 栗子:一般在使用框架的時(shí)候哟玷,框架的開發(fā)者會(huì)抽出一個(gè)類供外部調(diào)用狮辽,而這個(gè)主要的類像是一個(gè)中介一樣去調(diào)用框架里面的其他類,恰恰框架里面其他類一般都是不可訪問(調(diào)用)的巢寡,這個(gè)框架就遵守了迪米特原則喉脖,其他開發(fā)人員只關(guān)心調(diào)用的方法,并不需要關(guān)心功能具體如何實(shí)現(xiàn)

開閉

  • 概念:類讼渊、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放动看,對(duì)修改關(guān)閉

  • 栗子:在軟件的生命周期內(nèi),因?yàn)樽兓谩⑸?jí)和維護(hù)等原因需要對(duì)軟件原有代碼進(jìn)行修改時(shí)菱皆,可能會(huì)給舊代碼中引入錯(cuò)誤,也可能會(huì)使我們不得不對(duì)整個(gè)功能進(jìn)行重構(gòu)挨稿,并且需要原有代碼經(jīng)過重新測(cè)試仇轻,整個(gè)流程對(duì)開發(fā)周期影響很大,這個(gè)時(shí)候就需要開閉原則來(lái)解決這種問題奶甘,在前期代碼設(shè)計(jì)的時(shí)候篷店,要盡量考慮擴(kuò)展性,避免后續(xù)新增功能的時(shí)候需要引發(fā)代碼的重構(gòu)

總結(jié)

  • 單一職責(zé)原則告訴我們實(shí)現(xiàn)類要職責(zé)單一

  • 里氏替換原則告訴我們不要破壞繼承體系

  • 依賴倒置原則告訴我們要面向接口編程

  • 接口隔離原則告訴我們?cè)谠O(shè)計(jì)接口的時(shí)候要精簡(jiǎn)單一

  • 迪米特原則告訴我們要降低耦合

  • 開閉原則是總綱,告訴我們要對(duì)擴(kuò)展開放疲陕,對(duì)修改關(guān)閉

精品文章

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

面向?qū)ο罅蠡驹瓌t - 網(wǎng)絡(luò)引擎切換

如果不夠準(zhǔn)確方淤,請(qǐng)幫忙指出

這篇文章要是對(duì)你有幫助的話,記得點(diǎn)個(gè)贊

Android 技術(shù)討論 Q 群:10047167

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹄殃,一起剝皮案震驚了整個(gè)濱河市携茂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诅岩,老刑警劉巖讳苦,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吩谦,居然都是意外死亡鸳谜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門式廷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咐扭,“玉大人,你說我怎么就攤上這事懒棉〔菝瑁” “怎么了览绿?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵策严,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我饿敲,道長(zhǎng)妻导,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任怀各,我火速辦了婚禮倔韭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓢对。我一直安慰自己寿酌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布硕蛹。 她就那樣靜靜地躺著醇疼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪法焰。 梳的紋絲不亂的頭發(fā)上秧荆,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音埃仪,去河邊找鬼乙濒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卵蛉,可吹牛的內(nèi)容都是我干的颁股。 我是一名探鬼主播么库,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甘有!你這毒婦竟也來(lái)了廊散?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梧疲,失蹤者是張志新(化名)和其女友劉穎允睹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幌氮,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缭受,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了该互。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片米者。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宇智,靈堂內(nèi)的尸體忽然破棺而出蔓搞,到底是詐尸還是另有隱情,我是刑警寧澤随橘,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布喂分,位于F島的核電站,受9級(jí)特大地震影響机蔗,放射性物質(zhì)發(fā)生泄漏蒲祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一萝嘁、第九天 我趴在偏房一處隱蔽的房頂上張望梆掸。 院中可真熱鬧,春花似錦牙言、人聲如沸酸钦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卑硫。三九已至,卻和暖如春庞钢,著一層夾襖步出監(jiān)牢的瞬間拔恰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工基括, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颜懊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像河爹,于是被迫代替她去往敵國(guó)和親匠璧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359