組合模式 程式設計師必備技能 設計模式之 組合模式

2021-10-14 17:13:07 字數 2131 閱讀 1117

「組合模式」也被稱為「部分整體模式」該模式屬於結構型模式的一種。

講解該模式之前先帶大家熟悉一下「樹形結構」。相信大家對「樹形結構」不會太陌生,如果你剛好不太了解的話可以想一下大樹,一顆樹它分別有樹根、樹枝、樹葉,正好樹形結構中也有根節點、子節點(非葉子節點)、葉子節點。

組合模式就運用了樹形結構,該模式的核心思想是:將多個物件組合成樹形結構,以此結構來表示「整體-部分」之間的層次關係。

uml類圖講解:

1、component:組合模式中的「根節點」,可以是介面、抽象類、普通類,該類中定義了其子類的所有共性內容,並且該類中還存在著用於訪問和管理它子部件的方法。

2、leaf:組合中的葉子節點,也就是最末端的節點,該節點下不會再有子節點。

3、composite:非葉子節點,它的作用是儲存子部件,並且在composite中實現了對子部件的相關操作。

案例:某公司老闆需要開發乙個人員和部門管理系統,要求是可以靈活的新增、刪除、展示部門以及部門下的員工。此時我們就可以通過組合模式來實現。

組織構成 => 對應component角色

public abstract class organizationcomponent   /**   * 刪除方法   * 同add()方法一樣設計為空實現。   */  public void remove(organizationcomponent component)  ... get()、set()、有參構造方法}
公司 => 對應composite角色

public class company extends organizationcomponent   /**   * 重寫刪除方法   */  @override  public void remove(organizationcomponent component)   /**   * 實現顯示方法   */  @override  public void show()   }}
部門 => 對應composite角色

public class department extends organizationcomponent   /**   * 重寫刪除方法   */  @override  public void remove(organizationcomponent component)   /**   * 實現顯示方法   */  @override  public void show()   }}
員工 => 對應的是leaf角色

public class workers extends organizationcomponent }
客戶端測試類

public class client }
執行結果:執行結果圖

1、使用組合模式可以讓使用者可以使用統一的方式處理整個樹形結構的個別物件和組合物件,從而簡化客戶端的操作。

2、組合模式具有較強的擴充套件性,當我們想要更改組合物件時,只需要調整內部的層次關係即可,客戶端不需要作出任何改動。

3、客戶端不用考慮組合中的細節,通過新增節點和葉子就可以建立出複雜的樹形結構。

4、當需要處理的物件是樹形結構時可以考慮使用組合模式。

5、節點和葉子節點存在很大差異的情況下不建議使用組合模式。

今天的分享就到這裡了,如果感覺「菜鳥」寫的文章還不錯,記得點讚加關注呦!你們的支援就是我堅持下去的動力。文章**寫的有問題的也希望大家可以指出,我會虛心受教。

黑馬程式設計師 設計模式

一 設計模式概述 1 設計模式概念 我們專案中有很多相同的東西,我們把這些相同的東西抽取出來 符合某種規則,這個稱為設計模式。二 簡單工廠模式 1 如果有寫完乙個類不想讓其他人建立這個類的物件怎麼辦?第一種把構造私有化 第二種定義抽象類 2 物件導向的設計原則?對修改關閉,對擴充套件開放 三 工廠方...

黑馬程式設計師 設計模式

第一講 設計模式 1.設計模式概述 設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。2.物件導向思想設計原則 在實際的開發中,我們要想更深入的了解物件導向思想,就必須熟悉前人總結過的...

程式設計師寫作的必備技能 Markdown

作為一位程式設計師,除去 coding 程式設計的硬技能之外,寫作的軟體能也是需要培養的,而寫作處處離不開 markdown,比如 github 的 readme 文件。雖然 markdown 的語法並不難,但是還是有很多技巧和規範的,我總結梳理了一下,分享給大家。大神可以直接繞道了,這是給新手學習...