靈活軟件之路——面向?qū)ο蟮牧笤瓌t

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

Single Responsibility Principle代箭, SRP的定義是:就一個(gè)類而言嫩与,應(yīng)該僅有一個(gè)引起它變化的原因。簡(jiǎn)單來(lái)說(shuō)儡毕,一個(gè)類中應(yīng)該是一組相關(guān)性很高的數(shù)據(jù)的封裝也切。

2、開閉原則

Open Close Principle腰湾,OCP雷恃,Java中最基礎(chǔ)的設(shè)計(jì)原則,其定義是:軟件中的對(duì)象(類费坊、模塊倒槐、函數(shù)等)應(yīng)該對(duì)于擴(kuò)展是開放的,但是對(duì)于修改是封閉的附井。因此讨越,當(dāng)軟件需求發(fā)生變化時(shí),我們應(yīng)該盡量通過(guò)擴(kuò)展的方式來(lái)實(shí)現(xiàn)變化永毅,而不是通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)谎痢。

軟件開發(fā)過(guò)程中,最不會(huì)變化的就是變化本身卷雕。程序一旦開發(fā)完成,程序中的一個(gè)類的實(shí)現(xiàn)只應(yīng)該因錯(cuò)誤而被修改票从,新的或者改變的特性應(yīng)該通過(guò)新建不同的類實(shí)現(xiàn)漫雕,新建的類可以通過(guò)繼承的方式來(lái)重用原類的代碼滨嘱。

在實(shí)現(xiàn)開閉原則中,就需要使用接口了浸间,因?yàn)閿U(kuò)展原代碼功能的主要方式就是繼承太雨。

3、里氏替換原則

Liskov Substitution Principle魁蒜,LSP囊扳, 其第一種定義是:如果每一個(gè)類型為S的對(duì)象O1,都有類型為T的對(duì)象O2兜看,使得以T定義的所有程序P在所有的對(duì)象O1都代換成O2時(shí)锥咸,程序P的行為沒有發(fā)生變化,那么類型S是類型T的子類型细移。里氏替換的第二種定義是:所有引用基類的地方必須能透明地使用其子類的對(duì)象搏予。

面向?qū)ο笳Z(yǔ)言的三大特性:封裝、繼承弧轧、多態(tài)雪侥。里氏替換原則就是依賴于繼承、多態(tài)這兩個(gè)特性精绎。里氏替換對(duì)依賴注入的問(wèn)題提供了指導(dǎo)原則速缨,也就是建立抽象,通過(guò)抽象建立規(guī)范代乃,具體的實(shí)現(xiàn)在運(yùn)行時(shí)替換掉抽象旬牲,保證系統(tǒng)的擴(kuò)展性、靈活性襟己。

開閉原則和里氏替換原則往往是生死相依引谜、不離不棄的,特別是在依賴注入的問(wèn)題上擎浴,通過(guò)里氏替換來(lái)達(dá)到對(duì)擴(kuò)展開放员咽,對(duì)修改關(guān)閉的效果。這兩個(gè)原則都同事強(qiáng)調(diào)了一個(gè)OOP的重要特性——抽象贮预,在開發(fā)過(guò)程種運(yùn)用抽象是走向代碼優(yōu)化的重要一步贝室。

對(duì)于里氏替換原則,個(gè)人認(rèn)為這個(gè)原則仿吞,在Java語(yǔ)言層面就已經(jīng)完成了滑频,簡(jiǎn)單而言,就是基類類型的形參對(duì)應(yīng)子類對(duì)象的實(shí)參唤冈。

4峡迷、依賴倒置原則

Dependence Inversion Principle,DIP,依賴倒置原則指導(dǎo)了一種特定的解耦形式绘搞,使得高層次的模塊不依賴于低層次的模塊的實(shí)現(xiàn)細(xì)節(jié)的目的彤避,依賴模塊被顛倒了。

依賴倒置原則由一下幾個(gè)關(guān)鍵點(diǎn):

  • 高層模塊不應(yīng)該依賴底層模塊夯辖,兩者都應(yīng)該依賴其抽象琉预;
  • 抽象不應(yīng)該依賴細(xì)節(jié);
  • 細(xì)節(jié)應(yīng)該依賴抽象蒿褂;

在Java語(yǔ)言中圆米,抽象就是指接口或抽象類,兩者都是不能直接被實(shí)例化的啄栓;細(xì)節(jié)就是實(shí)現(xiàn)類娄帖,實(shí)現(xiàn)接口或繼承抽象類而產(chǎn)生的類就是細(xì)節(jié)。依賴倒置原則在Java語(yǔ)言中的表現(xiàn)就是:模塊間的依賴通過(guò)抽象發(fā)生谴供,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系块茁,其依賴關(guān)系是通過(guò)接口或抽象類產(chǎn)生的,即面向接口編程桂肌。概括起來(lái)就是:依賴抽象数焊,而不依賴具體實(shí)現(xiàn)

5崎场、接口隔離原則

Interface Segregation Principles佩耳,ISP,接口隔離原則的定義是:客戶端不應(yīng)該依賴它不需要的接口谭跨。另一種定義:類間的依賴關(guān)系應(yīng)該建立在最小的接口上干厚。

接口隔離原則將非常龐大、臃腫的接口拆分成更小的和更具體的接口螃宙,這樣客戶就會(huì)指需要知道他們感興趣的方法蛮瞄。接口隔離原則的目的是系統(tǒng)解開耦合,從而容易重構(gòu)谆扎、更改和重新部署挂捅。

以上五個(gè)原則在21世紀(jì)早期被定義為SOLID原則,作為面向?qū)ο缶幊痰?個(gè)基本原則堂湖,基本特點(diǎn)就是:抽象闲先、單一職責(zé)、最小化无蜂。

6伺糠、迪米特原則

Law of Demeter,LOD斥季,也稱為最少只是原則训桶。一個(gè)對(duì)象更應(yīng)該對(duì)其他對(duì)象有最少的了解。通俗的講:一個(gè)類應(yīng)該對(duì)自己需要耦合或調(diào)用的類知道得最少,類的內(nèi)部如何實(shí)現(xiàn)與調(diào)用者或者依賴者沒關(guān)系渊迁,調(diào)用者或者依賴者只需要知道它需要的方法即可慰照,其他的可一概不管。

應(yīng)用六大原則的目的

應(yīng)用軟件的開發(fā)過(guò)程中琉朽,不能僅僅只關(guān)于去完成,也要考慮到后續(xù)的升級(jí)和維護(hù)過(guò)程稚铣。簡(jiǎn)單的說(shuō)明就是擁抱變化箱叁,擁抱變化也就一味著在滿足需求且不破壞系統(tǒng)穩(wěn)定性的前提下保持高可擴(kuò)展性、高內(nèi)聚惕医、低耦合耕漱。這也是循序六大原則的目的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抬伺,一起剝皮案震驚了整個(gè)濱河市螟够,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌峡钓,老刑警劉巖妓笙,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異能岩,居然都是意外死亡寞宫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拉鹃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辈赋,“玉大人,你說(shuō)我怎么就攤上這事膏燕≡壳” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵坝辫,是天一觀的道長(zhǎng)篷就。 經(jīng)常有香客問(wèn)我,道長(zhǎng)阀溶,這世上最難降的妖魔是什么腻脏? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮银锻,結(jié)果婚禮上永品,老公的妹妹穿的比我還像新娘。我一直安慰自己击纬,他們只是感情好鼎姐,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般炕桨。 火紅的嫁衣襯著肌膚如雪饭尝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天献宫,我揣著相機(jī)與錄音钥平,去河邊找鬼。 笑死姊途,一個(gè)胖子當(dāng)著我的面吹牛涉瘾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捷兰,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼立叛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贡茅?” 一聲冷哼從身側(cè)響起秘蛇,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顶考,沒想到半個(gè)月后赁还,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡村怪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年秽浇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甚负。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柬焕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梭域,到底是詐尸還是另有隱情斑举,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布病涨,位于F島的核電站富玷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏既穆。R本人自食惡果不足惜赎懦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幻工。 院中可真熱鬧励两,春花似錦、人聲如沸囊颅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盲憎,卻和暖如春嗅骄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饼疙。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工溺森, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窑眯。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓儿惫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親伸但。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 單一職責(zé)原則 (SRP) 全稱 SRP , Single Responsibility Principle 單一職...
    米莉_L閱讀 1,769評(píng)論 2 5
  • 本文出自《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》中的第一章留搔。 1更胖、優(yōu)化代碼的第一步——單一職責(zé)原則 單一職責(zé)原則的...
    MrSimp1e0閱讀 1,776評(píng)論 1 13
  • 前言 設(shè)計(jì)模式六大原則網(wǎng)上資料比較多比較亂,本文將網(wǎng)上的一些好的資料做一下整理隔显,以便隨時(shí)翻閱却妨。友情提示,設(shè)計(jì)模式雖...
    簡(jiǎn)單的土豆閱讀 1,438評(píng)論 0 10
  • 本文原創(chuàng)括眠,轉(zhuǎn)載請(qǐng)注明出處彪标。歡迎關(guān)注我的 簡(jiǎn)書 ,關(guān)注我的專題 Android Class 我會(huì)長(zhǎng)期堅(jiān)持為大家收錄簡(jiǎn)...
    MeloDev閱讀 1,232評(píng)論 8 33
  • 面向?qū)ο蟮?個(gè)基本要素: 封裝掷豺、繼承捞烟、多態(tài) 面向?qū)ο蟮?個(gè)基本設(shè)計(jì)原則: 單一職責(zé)原則(Single-Respos...
    badcyc閱讀 863評(píng)論 0 4