[Android]《Android 源碼設(shè)計模式解析與實戰(zhàn)》讀書筆記 2

里氏替換原則 (LSP)#

定義:所有引用父類的地方,必須能使用子類的對象丽蝎。簡單地說就是將父類替換為他的子類是不會出現(xiàn)問題,反之膀藐,未必可以屠阻。那么里氏替換原則就是依賴于面向?qū)ο笳Z言的繼承與多態(tài)红省。核心原理是抽象。

這里列舉一下繼承的優(yōu)缺點:

優(yōu)點:

(1)代碼重用栏笆,減少創(chuàng)建類的成本类腮,每個子類都擁有父類的方法與屬性。

(2)子類與父類基本相似蛉加,但與父類又有所區(qū)別蚜枢。

(3)提高代碼的可擴展性。

缺點:

(1)繼承是侵入性的针饥,只要繼承就必須擁有父類所有的屬性與方法厂抽。

(2)可能造成子類代碼冗余、靈活性降低,因為子類必須擁有父類的屬性和方法丁眼。

開閉原則和里氏替換原則是生死相依的筷凤、不離不棄的。他們都強調(diào)了抽象這一重要的特性苞七。

示例代碼

public class Window {
    public void show(View child){
        child.draw();
    }
}

public abstract class View {
    public abstract void draw();
    public void measure(int width,int height){
        //測量視圖大小
    }
}

public class Button extends View {
    @Override
    public void draw() {
        // 繪制按鈕
    }
}

public class TextView extends View {
    @Override
    public void draw() {
        // 繪制文本
    }
}

上述示例中藐守,Window依賴于 View,而 View 定義了一個視圖抽象蹂风,measure 是各個子類共享的方法卢厂,子類通過覆寫 View 的 draw 方法實現(xiàn)具有各自特色的功能,在這里這個功能就是繪制自身的內(nèi)容惠啄。任何繼承自 View 類的子類都可以設(shè)置給 show 方法慎恒,就是所說的里氏替換。通過里氏替換撵渡,就可以自定義各式各樣融柬、千變?nèi)f化的 View,然后傳遞給 Window趋距,Window 負責組織 View 并將 View 顯示到屏幕上粒氧。

依賴倒置原則(DIP)

定義:指代一種特定的解耦方式,使得高層次的模塊不依賴于低層次的模塊的實現(xiàn)細節(jié)的目的节腐。他有一下幾個關(guān)鍵點:

(1)高層模塊不依賴于低層模塊靠欢,應(yīng)該都依賴其抽象。

(2)抽象不依賴細節(jié)铜跑。

(3)細節(jié)應(yīng)依賴抽象。

解釋:在Java中骡澈,抽象就是指接口或者抽象類锅纺,兩者都是不能直接被實例化的;細節(jié)就是實現(xiàn)類肋殴,實現(xiàn)接口或者繼承抽象類而產(chǎn)生的就是細節(jié)囤锉,也就是可以加上一個關(guān)鍵字new產(chǎn)生的對象坦弟。高層模塊就是調(diào)用端,底層模塊就是具體實現(xiàn)類官地。依賴倒置原則在Java中的表現(xiàn)就是:模塊間通過抽象發(fā)生酿傍,實現(xiàn)類之間不發(fā)生直接依賴關(guān)系,其依賴關(guān)系是通過接口或者抽象類產(chǎn)生的驱入。如果類與類直接依賴細節(jié)赤炒,那么就會直接耦合血久,那么當修改時捷绒,就會同時修改依賴者代碼,這樣限制了可擴展性传泊。

接口隔離原則(ISP)

定義:類間的依賴關(guān)系應(yīng)該建立在最小的接口上雪情,將龐大遵岩、臃腫的接口拆分成更小的、更具體的接口巡通。目的是系統(tǒng)的解耦尘执,從而更容易重構(gòu)、更改和重新部署宴凉。
示例:

 finally {
      if (fileOutputStream != null) {
        try {
          fileOutputStream.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }

這段代碼我們經(jīng)常見到誊锭,他的可讀性非常的差。我們知道 Java 中有一個 Closeable 接口標識了可關(guān)閉對象跪解,它只有一個 close 方法炉旷,有100多個類實現(xiàn)了這個接口,這意味著在關(guān)閉這100多個類的對象時我們都要寫出上面那一段難看的代碼來關(guān)閉它叉讥,這你能忍窘行?
書中給出的解決方案如下:
既然都實現(xiàn)了Closeable接口,那我們只需要建一個方法來統(tǒng)一關(guān)閉這些對象即可图仓,以下為工具類代碼:
public class Closeutils {
private Closeutils() {
}

  /**
   * 關(guān)閉Closeable對象
   */
  public static void closeQuietly(Closeable closeable) {
    if (null != closeable) {
      try {
        closeable.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

此時關(guān)閉就只需要這樣:

finally {
  Closeutils.closeQuietly(fileOutputStream);
}

代碼非常簡潔罐盔,而且只要繼承了 Closeable 接口都可以用此方法關(guān)閉,我們只需要知道這個對象是可關(guān)閉的救崔,其他的一概不關(guān)心惶看,也就是接口隔離原則。

迪米特原則(LOD)

定義:一個類應(yīng)該對自己需要耦合或者調(diào)用的類知道的最少六孵,類的內(nèi)部如何實現(xiàn)與調(diào)用者或者依賴者沒有關(guān)系纬黎,調(diào)用者或依賴者只需知道他需要的方法,其他可以一概不管劫窒。這樣使得系統(tǒng)具有更低的耦合與更好的可擴展性本今。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冠息,更是在濱河造成了極大的恐慌挪凑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逛艰,死亡現(xiàn)場離奇詭異躏碳,居然都是意外死亡,警方通過查閱死者的電腦和手機散怖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門菇绵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杭抠,你說我怎么就攤上這事脸甘。” “怎么了偏灿?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵丹诀,是天一觀的道長。 經(jīng)常有香客問我翁垂,道長铆遭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任沿猜,我火速辦了婚禮枚荣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啼肩。我一直安慰自己橄妆,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布祈坠。 她就那樣靜靜地躺著害碾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赦拘。 梳的紋絲不亂的頭發(fā)上慌随,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音躺同,去河邊找鬼阁猜。 笑死,一個胖子當著我的面吹牛蹋艺,可吹牛的內(nèi)容都是我干的剃袍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捎谨,長吁一口氣:“原來是場噩夢啊……” “哼笛园!你這毒婦竟也來了隘击?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤研铆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后州叠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棵红,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年咧栗,在試婚紗的時候發(fā)現(xiàn)自己被綠了逆甜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡致板,死狀恐怖交煞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斟或,我是刑警寧澤素征,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萝挤,受9級特大地震影響御毅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怜珍,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一端蛆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酥泛,春花似錦今豆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘦馍,卻和暖如春歼秽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背情组。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工燥筷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人院崇。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓肆氓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親底瓣。 傳聞我的和親對象是個殘疾皇子谢揪,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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