設(shè)計(jì)模式雜記 - 基本概念

一 關(guān)系

依賴(Dependency)

依賴關(guān)系是類與類之間的聯(lián)接。依賴關(guān)系表示一個(gè)類依賴于另一個(gè)類的定義。例如,一個(gè)人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因?yàn)镻erson類引用了Car和House。與關(guān)聯(lián)不同的是,Person類里并沒有Car和House類型的屬性,Car和House的實(shí)例是以參量的方式傳入到buy()方法中去的。一般而言,依賴關(guān)系在Java語(yǔ)言中體現(xiàn)為局域變量、方法的形參,或者對(duì)靜態(tài)方法的調(diào)用。

A ------------> B
A依賴于B,A類中有B類型的局部變量、方法型參或者其他,但是沒有B的成員變量或者屬性。

關(guān)聯(lián)(Association)

關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)接,它使一個(gè)類知道另一個(gè)類的屬性和方法。關(guān)聯(lián)可以是雙向的,也可以是單向的。關(guān)聯(lián)關(guān)系一般使用成員變量來實(shí)現(xiàn)。

A -——————> B
A單項(xiàng)關(guān)聯(lián)B,A類中有一個(gè)B的成員變量或者屬性。

聚合(Aggregation)

聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體和個(gè)體之間的關(guān)系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關(guān)系便整體和個(gè)體的關(guān)系。與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實(shí)例變量實(shí)現(xiàn)的。但是關(guān)聯(lián)關(guān)系所涉及的兩個(gè)類是處在同一層次上的,而在聚合關(guān)系中,兩個(gè)類是處在不平等層次上的,一個(gè)代表整體,另一個(gè)代表部分。

汽車 ◇—————— > 引擎

組合(Composition)

組合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強(qiáng)的關(guān)系。它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分對(duì)象的生命周期,組合關(guān)系是不能共享的。代表整體的對(duì)象需要負(fù)責(zé)保持部分對(duì)象和存活,在一些情況下將負(fù)責(zé)代表部分的對(duì)象湮滅掉。代表整體的對(duì)象可以將代表部分的對(duì)象傳遞給另一個(gè)對(duì)象,由后者負(fù)責(zé)此對(duì)象的生命周期。換言之,代表部分的對(duì)象在每一個(gè)時(shí)刻只能與一個(gè)對(duì)象發(fā)生組合關(guān)系,由后者排他地負(fù)責(zé)生命周期。部分和整體的生命周期一樣。

公司 ◆——————————> 部門

*注

在代碼層面關(guān)聯(lián)、聚合、組合是一樣的,但是語(yǔ)義上會(huì)有差別。

二 原則

  1. 開閉原則 (Open Closed Principle, OCP)
    對(duì)模塊 擴(kuò)展開放, 對(duì)修改關(guān)閉。 .m里面的實(shí)現(xiàn)代碼不改變(通過擴(kuò)展子類來擴(kuò),修改或者擴(kuò)展功能)
    該原則是一個(gè)最理想狀態(tài)。

  2. 里氏代換原則 (Liskov Substitution Principle , LSP)
    任何類可以出現(xiàn)的地方, 子類一定可以出現(xiàn), 子類跟父類可以相互替換,子類可以用父類所有的方法。該原則和接口隔離原則互斥。
    和多肽的區(qū)別:多肽是重寫父類的方法,而里氏替換原則則不能重現(xiàn)父類方法。

  3. 依賴倒轉(zhuǎn)原則 (Dependency Inversion Principle, DIP)
    抽象(接口)不依賴于細(xì)節(jié)(具體實(shí)現(xiàn)),細(xì)節(jié)依賴于抽象。(一般指的是接口)
    再說白點(diǎn),就是多用類似于 id<協(xié)議> 這種形式,而設(shè)計(jì)的時(shí)候也是要以這種形式而去設(shè)計(jì)。

  4. 接口隔離原則 (Interface Segregation Principle, ISP)
    接口里面只做必要的事情 不做其他相關(guān)的事情。該原則和里氏代換原則互斥。

  5. 合成/聚合復(fù)用原則 (Composite/ Aggregate Reuse Principle, CARP)
    需要從一個(gè)類擴(kuò)展出另外一種方法,盡量不要使用繼承(而是用聚合來擴(kuò)展),使用新的方法。

  6. 最小知識(shí)原則 (Principle of Least Knowledge, PLK)
    兩個(gè)類沒有彼此直接通信. 而是使用另一個(gè)類來通信。

  7. 單一職責(zé)原則 (Single responsibility principle, SRP)
    一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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