Android 源碼設計模式解析與實戰(zhàn) 讀書筆記 1

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

  1. 優(yōu)化代碼的第一步 —— 單一職責原則
    單一職責原則的英文名稱為 Single Responsibility Principe熊咽,縮寫為 SRP矫付,定義是:就一個類而言阳准,應該就有一個引起它變化的原因。簡單來說屿愚,一個類中應該是一組相關(guān)性很高的函數(shù)、數(shù)據(jù)的封裝。
  1. 讓程序更穩(wěn)定裹纳、更靈活 —— 開閉原則
    開閉原則的英文全稱是 Open Close Principe,縮寫為 OCP紧武,它是 Java 世界里最基礎的設計原則剃氧,它指導我們?nèi)绾谓⒁粋€穩(wěn)定的、靈活的系統(tǒng)阻星。其定義是:軟件中的對象(類朋鞍、模塊已添、函數(shù)等)應該對于擴展是開放的,但是滥酥,對于修改是封閉的更舞。
    在軟件的生命周期內(nèi),因為變化坎吻、升級和維護等原因需要對軟件原有的代碼進行修改時缆蝉,可能會將錯誤引入原本已經(jīng)經(jīng)過測試的舊代碼中,破壞原有系統(tǒng)瘦真。因此刊头,當軟件需要變化時嘶窄,我們應該盡量通過擴展的方式來實現(xiàn)變化浦箱,而不是通過修改已有的代碼來實現(xiàn)作谭。當然嚣鄙,在現(xiàn)實開發(fā)中骇两,只通過繼承的方式來升級例嘱、維護原有系統(tǒng)只是一個理想化的愿景滔韵,在實際開發(fā)過程中肆捕,修改原有代碼际看、擴展代碼往往是同時存在的咸产。
  1. 構(gòu)建擴展性更好的系統(tǒng) —— 里氏替換原則
    里氏替換原則英文全稱是 Liskov Substitution Principle,縮寫是 LSP仿村。LSP 的第一種定義是:如果對每一個類型為 S 的對象 O1锐朴,都有類型為 T 的對象 O2,使得以 T 定義的所有程序 P 在所有的對象 O1 都代換成 O2 時蔼囊,程序 P 的行為沒有發(fā)生變化焚志,那么類型 S 是類型 T 的子類型。上面的這種定義不太好理解畏鼓,里氏替換原則的第二種定義:所有引用基類的地方必須能夠透明地使用其子類的對象酱酬。面向?qū)ο蟮恼Z音的三大特點是繼承、封裝云矫、多態(tài)膳沽,里氏替換原則就是依賴于繼承、多態(tài)這兩大特性让禀。里氏替換原則簡單來說就是:只要父類能出現(xiàn)的地方子類就可以出現(xiàn)挑社,而且替換為子類也不會產(chǎn)生任何錯誤或者異常,使用者可能根本就不需要知道是父類還是子類巡揍。但是痛阻,反過來就不行了,有子類出現(xiàn)的地方腮敌,父類未必就能適應阱当∏卫總結(jié)起來就是兩個字:抽象。
    里氏替換原則的核心原理是抽象弊添,抽象又依賴于繼承這個特性录淡,在 OOP 當中,繼承的優(yōu)缺點都相當明顯油坝,優(yōu)點有如下幾點:
    (1)代碼重用嫉戚,減少創(chuàng)建類的成本,每個子類都擁有父類的方法和屬性免钻;
    (2)子類與父類基本相似彼水,但又與父類有所區(qū)別;
    (3)提高代碼的可擴展性极舔。
    繼承的缺點:
    (1)繼承是侵入性的,只要繼承就必須擁有父類的所有屬性和方法链瓦;
    (2)可能造成子類代碼的冗余拆魏,靈活性降低,因為子類必須擁有父類的屬性和方法慈俯。
    里氏替換原則提供了指導原則:也就是建立抽象渤刃,通過抽象建立規(guī)范,具體的實現(xiàn)在運行時替換掉抽象贴膘,保證系統(tǒng)的擴展性卖子、靈活性。開閉原則和里氏替換原則往往是生死相依刑峡、不離不棄的洋闽,通過里氏替換原則來達到對擴展開放,對修改關(guān)閉的效果突梦。然而诫舅,這兩個原則都同時強調(diào)了一個 OOP 的重要特性 —— 抽象,因此宫患,在開發(fā)過程中運用抽象是走向代碼優(yōu)化的重要一步刊懈。
  1. 讓項目擁有變化的能力 —— 依賴倒置原則
    依賴倒置原則英文全稱是 Dependence Inversion Principle,縮寫是 DIP娃闲。依賴倒置原則指代了一種特定的解耦形式虚汛,使得高層次的模塊不依賴于低層次的模塊的實現(xiàn)細節(jié)的目的,依賴模塊被顛倒了皇帮。
    依賴倒置原則的幾個關(guān)鍵點:
    (1)高層模塊不應該依賴低層模塊卷哩,兩者都應該依賴其抽象;
    (2)抽象不應該依賴細節(jié)玲献;
    (3)細節(jié)應該依賴抽象殉疼。
    在 Java 語言中梯浪,抽象就是指接口或者抽象類,兩者都是不能直接被實例化的瓢娜;細節(jié)就是實現(xiàn)類挂洛,實現(xiàn)接口或繼承抽象類而產(chǎn)生的類就是細節(jié),其特點是眠砾,可以直接被實例化虏劲。高層模塊就是調(diào)用端,低層模塊就是具體實現(xiàn)類褒颈。依賴倒置原則在 Java 語言中的表現(xiàn)就是:模塊間的依賴通過抽象發(fā)生柒巫,實現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的谷丸。一句話概況就是:面向接口編程堡掏,或者說是面向抽象編程,這里的抽象是指接口或抽象類刨疼。面向接口編程是面向?qū)ο缶柚蝗洌簿褪侵皬娬{(diào)的抽象。
  1. 系統(tǒng)有更高的靈活性 —— 接口隔離原則
    接口隔離原則的英文全稱是 Interface Segregation Principles揩慕,縮寫是 ISP亭畜。ISP 的定義是:客戶端不應該依賴它不需要的接口。另一種定義是:類間的依賴關(guān)系應該建立在最小的接口上迎卤。接口隔離原則將非常龐大拴鸵、臃腫的接口拆分成更小的和更具體的接口,這樣客戶將會只需要知道他們感興趣的方法蜗搔。接口隔離原則的目的是系統(tǒng)解耦劲藐,從而容易重構(gòu)、更改和重新部署碍扔。接口隔離原則說白了就是瘩燥,讓客戶端依賴的接口盡可能地小。
  1. 更好的可擴展性 —— 迪米特原則
    迪米特原則英文全稱為 Law of Demeter不同,縮寫是 LOD厉膀,也稱為最少知識原則(Least Knowledge Principle)。定義:一個對象應該對其他對象有最少的了解二拐。通俗地講服鹅,一個類應該對自己需要耦合或者調(diào)用的類知道得越少越好,類的內(nèi)部如何實現(xiàn)與調(diào)用者或者依賴者沒有關(guān)系百新,調(diào)用者或者依賴者只需要知道它需要的方法即可企软,其他的可一概不用考慮。類與類之間的關(guān)系越密切饭望,耦合度越大仗哨,當一個類發(fā)生改變時形庭,對另一個類的影響也越大。
    迪米特原則還有一個英文解釋是 Only talk to your immedate friends厌漂,就是:只與直接的朋友通信萨醒。通過這簡單的幾個字就能夠?qū)⑽覀儚膹碗s的關(guān)系網(wǎng)中剝離出來,降低程序耦合度苇倡、提高穩(wěn)定性富纸。

本文內(nèi)容參考自《Android 源碼設計模式解析與實戰(zhàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旨椒,隨后出現(xiàn)的幾起案子晓褪,更是在濱河造成了極大的恐慌,老刑警劉巖综慎,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涣仿,死亡現(xiàn)場離奇詭異,居然都是意外死亡寥粹,警方通過查閱死者的電腦和手機变过,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涝涤,“玉大人,你說我怎么就攤上這事岛杀±” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵类嗤,是天一觀的道長糊肠。 經(jīng)常有香客問我,道長遗锣,這世上最難降的妖魔是什么货裹? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮精偿,結(jié)果婚禮上弧圆,老公的妹妹穿的比我還像新娘。我一直安慰自己笔咽,他們只是感情好搔预,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叶组,像睡著了一般拯田。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甩十,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天船庇,我揣著相機與錄音吭产,去河邊找鬼。 笑死鸭轮,一個胖子當著我的面吹牛臣淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播张弛,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼荒典,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吞鸭?” 一聲冷哼從身側(cè)響起寺董,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刻剥,沒想到半個月后遮咖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡造虏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年御吞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漓藕。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡陶珠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出享钞,到底是詐尸還是另有隱情揍诽,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布栗竖,位于F島的核電站暑脆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狐肢。R本人自食惡果不足惜添吗,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望份名。 院中可真熱鬧碟联,春花似錦、人聲如沸同窘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽想邦。三九已至裤纹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹰椒。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工锡移, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漆际。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓淆珊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奸汇。 傳聞我的和親對象是個殘疾皇子施符,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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