java設(shè)計(jì)模式

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

定義:就一個(gè)類而言锦庸,應(yīng)該僅有一個(gè)引起它變化的原因聂示。這句話的意思是說:我們不要讓一個(gè)類承擔(dān)過多的職責(zé)耿战,如果一個(gè)類承擔(dān)的職責(zé)過多琉用,就等于把這些職責(zé)全部耦合子一起姨蝴。一個(gè)職責(zé)的變化可能會(huì)削弱活著抑制這個(gè)類完成其他的職責(zé)的能力俊啼。這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí)左医,設(shè)計(jì)會(huì)遭到破環(huán)授帕。比如我經(jīng)常看到一些android開發(fā)在Activity中寫網(wǎng)絡(luò)數(shù)據(jù)處理邏輯浮梢,如果有l(wèi)istview列表的話也寫在activity類中跛十,問他們?yōu)槭裁催@樣寫除了好找代碼也沒啥理由了,如果把它們拆分大別的類中不是更好找秕硝,更清晰了嗎芥映。如果acticity過于臃腫行數(shù)過多,顯然不是什么好事,如果列表adpater和網(wǎng)絡(luò)數(shù)據(jù)有變化屏轰,我們都要在這個(gè)activity來修改颊郎,就會(huì)導(dǎo)致這個(gè)activity的變化的原因太多,我們?cè)诎姹揪S護(hù)的時(shí)候也會(huì)比較頭疼霎苗。也就嚴(yán)重違背了定義“就一個(gè)類而言姆吭。應(yīng)該僅有一個(gè)引起它變化的原因”。

2.開放封閉原則

定義:類唁盏、模塊内狸、函數(shù)等等等應(yīng)該是可以拓展的,但是不可修改厘擂,開放封閉有兩個(gè)含義昆淡,一個(gè)對(duì)于拓展是開放的,一個(gè)對(duì)于修改是封閉的刽严。對(duì)于開發(fā)來說需求肯定是要變化的昂灵,但是新需求一來,我們就要把類重新改一遍這顯然是令人頭疼的舞萄,所以我們?cè)O(shè)計(jì)程序時(shí)面對(duì)需求的改變要盡可能的保證相對(duì)的穩(wěn)定眨补,盡量用新代碼實(shí)現(xiàn)拓展來修改需求,而不是通過修改原來的代碼來實(shí)現(xiàn)倒脓。假設(shè)我們要實(shí)現(xiàn)一個(gè)列表撑螺,一開始只有查詢的功能,這時(shí)產(chǎn)品需要增加添加功能崎弃,過幾天又要新增刪除功能甘晤,大多人都是寫一個(gè)方法通過傳入不同的值來控制方法實(shí)現(xiàn)不同的功能,但是如果又要新增功能我們還的修改我們的方法饲做。用開發(fā)封閉原則解決就是增加一個(gè)抽象的功能類线婚,讓增加和刪除和查詢作為這個(gè)抽象類的字類,這樣如果我們?cè)谔砑庸δ芡а祝憔蜁?huì)發(fā)現(xiàn)我們不需要修改原有的類酌伊,只需要添加一個(gè)功能類的字類實(shí)現(xiàn)功能類的方法就可以了。

3.里氏替換原則

定義:所有引用基類(父類)的地方必須能透明的使用其子類的對(duì)象缀踪,里氏替換原則告訴我們居砖,在軟件中將一個(gè)基類對(duì)象替換成它的字類對(duì)象,程序?qū)⒉粫?huì)產(chǎn)生任何錯(cuò)誤和異常驴娃,反過來則不成立奏候,如果一個(gè)軟件實(shí)體使用的是一個(gè)字類對(duì)象的話,那么它不一定能夠使用基類對(duì)象唇敞,里氏替換原則是實(shí)現(xiàn)開閉原則的重要方式之一蔗草,由于使用基類對(duì)象的地方都可以使用字類對(duì)象咒彤,因此在程序中盡量使用基類類型來對(duì)對(duì)象進(jìn)行定義,而在運(yùn)行時(shí)在確定其子類類型咒精,用子類對(duì)象來替換父類對(duì)象镶柱。在使用時(shí)需要注意一下幾個(gè)地方:

  • 子類的所有方法必須在父類中聲明,或子類必須實(shí)現(xiàn)父類中的所有方法模叙,根據(jù)里氏替換原則歇拆,為了保住系統(tǒng)的擴(kuò)展性,在程序中通常使用父類來進(jìn)行定義范咨,如果一個(gè)方法只存在子類中飘言,在父類中不提供相應(yīng)的聲明叔壤,則無法在以父類定義的對(duì)象中使用該方法焕梅。
  • 我們?cè)谶\(yùn)用里氏替換原則時(shí)物舒,盡量把父類設(shè)計(jì)為抽象類或者接口,讓子類繼承父類或?qū)崿F(xiàn)父接口替蛉,并實(shí)現(xiàn)父類中聲明的方法贯溅,運(yùn)行時(shí),子類實(shí)列替換父類實(shí)列灭返,我們可以很方便的擴(kuò)展系統(tǒng)的功能盗迟,同時(shí)無需修改原有的子類的代碼,增加新的佛你功能我們可以通過增加一個(gè)新的子類來實(shí)現(xiàn)熙含,里氏替換原則是開閉原則的具體實(shí)現(xiàn)手段之一。

4.依賴倒置原則

定義:高層模塊不應(yīng)該依賴底層模塊艇纺,兩個(gè)都應(yīng)該依賴于抽象怎静。抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象黔衡。在java中蚓聘,抽象就是指接口或者抽象類,兩者都是不能直接被實(shí)列化的盟劫。細(xì)節(jié)就是實(shí)現(xiàn)類夜牡,實(shí)現(xiàn)接口或者繼承抽象類而產(chǎn)出的就是細(xì)節(jié),也就是可以加上一個(gè)關(guān)鍵字new產(chǎn)生的對(duì)象侣签,高層模塊就是調(diào)用端塘装,底層模塊就是具體實(shí)現(xiàn)類。依賴倒置原則在java中的表現(xiàn)就是:模塊間通過抽象發(fā)生影所,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系蹦肴,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的。如果與類直接依賴細(xì)節(jié)猴娩,那么就會(huì)直接耦合阴幌,那么修改時(shí)勺阐,就會(huì)同時(shí)修改依賴者代碼,這樣就限制了可擴(kuò)展性矛双。

5.迪米特原則

定義:一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少得與其他實(shí)體發(fā)生相互作用渊抽。也稱為最少知識(shí)原則。如果一個(gè)系統(tǒng)符合迪米特原則议忽,那么其中某一個(gè)模塊發(fā)生修改時(shí)懒闷,就會(huì)盡量少的影響其他模塊,擴(kuò)展會(huì)相對(duì)容易徙瓶,這是對(duì)軟件實(shí)體之間通信的限制毛雇,迪米特原則要求限制團(tuán)建實(shí)體之間通信的寬度和深度。迪米特法則可降低系統(tǒng)的耦合毒侦镇,使得類與類保持松散的耦合關(guān)系灵疮。迪米特原則要求我們?cè)谠O(shè)計(jì)系統(tǒng)時(shí),應(yīng)該盡量減少對(duì)象之前的交互壳繁,如果兩個(gè)對(duì)象之間不必彼此通信震捣,那么這兩個(gè)對(duì)象就不應(yīng)當(dāng)發(fā)生任何的相互作用,如果其中一個(gè)對(duì)象需要調(diào)用另外一個(gè)對(duì)象的方法時(shí)闹炉,可以通過第三者來轉(zhuǎn)發(fā)這個(gè)調(diào)用蒿赢,簡(jiǎn)言之,就是通過引入一個(gè)合理的第三者來降低現(xiàn)有對(duì)象之間的耦合度渣触,在將迪米特原則運(yùn)用到系統(tǒng)設(shè)計(jì)中時(shí)羡棵,要注意以下幾點(diǎn):

  • 在類的劃分上,應(yīng)當(dāng)盡量創(chuàng)建松耦合的類嗅钻,類之間的耦合度越低皂冰,就越有利于服用,一個(gè)處在松耦合中的類一旦被修改养篓,不會(huì)對(duì)關(guān)聯(lián)的類照成太大的波動(dòng).
  • 在類的結(jié)構(gòu)設(shè)計(jì)上秃流,每一個(gè)類都應(yīng)當(dāng)降低其成員變量和成員函數(shù)的訪問權(quán)限,在類的設(shè)計(jì)上柳弄,只要有可能舶胀,一個(gè)類型應(yīng)當(dāng)設(shè)計(jì)成不變類,在對(duì)其他類的引用上碧注,一個(gè)對(duì)象對(duì)其他對(duì)象的引用應(yīng)當(dāng)降到最低嚣伐。

6.接口隔離原則

定義:一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上,建立單一接口应闯,不要建立龐大臃腫的接口纤控,盡量細(xì)化接口,接口中的方法盡量小碉纺,也就是說船万,我們要為各個(gè)類建立專用的接口刻撒,而不要試圖去建立一個(gè)龐大的接口供所有依賴它的類去調(diào)用。采用接口隔離原則對(duì)接口進(jìn)行約束時(shí)要注意以下幾點(diǎn):

  • 接口盡量小耿导,但是要有限度声怔,對(duì)接口進(jìn)行細(xì)化哭提高程序設(shè)計(jì)靈活性,但是如果過小舱呻,則會(huì)照成接口數(shù)量過多醋火,使設(shè)計(jì)復(fù)雜化,所以一定要適度箱吕。
  • 為依賴接口的類定制服務(wù)芥驳,只暴露給調(diào)用的類需要的方法,它不需要的方法則隱藏起來茬高,只有專注地為一個(gè)模塊提供定制服務(wù)兆旬,才能建立最小的依賴關(guān)系,提高內(nèi)聚怎栽,減少對(duì)外交互丽猬,使接口用最少的方法完成最多的事情。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熏瞄,一起剝皮案震驚了整個(gè)濱河市脚祟,隨后出現(xiàn)的幾起案子强饮,更是在濱河造成了極大的恐慌由桌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柠座,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡片橡,警方通過查閱死者的電腦和手機(jī)妈经,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捧书,“玉大人吹泡,你說我怎么就攤上這事【桑” “怎么了爆哑?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵舆吮,是天一觀的道長(zhǎng)揭朝。 經(jīng)常有香客問我队贱,道長(zhǎng),這世上最難降的妖魔是什么潭袱? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任柱嫌,我火速辦了婚禮,結(jié)果婚禮上屯换,老公的妹妹穿的比我還像新娘编丘。我一直安慰自己,他們只是感情好彤悔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布嘉抓。 她就那樣靜靜地躺著,像睡著了一般晕窑。 火紅的嫁衣襯著肌膚如雪抑片。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天幕屹,我揣著相機(jī)與錄音蓝丙,去河邊找鬼。 笑死望拖,一個(gè)胖子當(dāng)著我的面吹牛渺尘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播说敏,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸥跟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了盔沫?” 一聲冷哼從身側(cè)響起医咨,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎架诞,沒想到半個(gè)月后拟淮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谴忧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年很泊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沾谓。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡委造,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出均驶,到底是詐尸還是另有隱情昏兆,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布妇穴,位于F島的核電站爬虱,受9級(jí)特大地震影響隶债,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饮潦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一燃异、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧继蜡,春花似錦回俐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碘举,卻和暖如春忘瓦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背引颈。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工耕皮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝙场。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓凌停,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親售滤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罚拟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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