設計模式 結構型模式 組合模式

2021-10-02 12:41:02 字數 3073 閱讀 5487

傳統方案解決學校院系展示存在的問題分析

1) 將學院看做是學校的子類,系是學院的子類,這樣實際上是站在組織大小來進行分層次的

2) 實際上我們的要求 是 :在乙個頁面中展示出學校的院系組成,乙個學校有多學院,乙個學院有多個系, 因此這種方案,不能很好實現 的管理的 操作,比如對學院、系的新增,刪除,遍歷等

3)解決方案:把學校、院、系 都看做 是組織結構,他們之間沒有繼承的關係,而是乙個樹形結構,可以更好的實現管理操作。 => 組合模式

基本介紹

1) 組合模式(composite pattern),又叫部分整體模式,它建立了物件組的樹形結構,將物件組合成樹狀結構以表示「整體-部分」的層次關係。

2) 組合模式依據樹形結構來組合物件,用來表示部分以及整體層次。

3) 這種型別的設計模式屬於結構型模式。

4) 組合模式使得使用者對單個物件和組合物件的訪問具有一致性, 即 :組合能讓客戶以一致的方式處理個別物件以及組合物件。

對原理結構圖的說明- - 即( ( 組 合模式的角色及職 責)

1)  component : 這是組合中物件宣告介面,在適當情況下,實現所有類共有的介面預設行為, , 用於訪問和管理 component  子部件 , component  可以是抽象類或者介面

2)  leaf :  在組合中表示葉子節點,葉子節點沒有子節點。

1) 組合模式解決這樣的問題,當我們的要處理的物件可以生成一顆樹形結構,而我們要對樹上的節點和葉子進行操作時,它能夠提供一致的方式,而不用考慮它是節點還是葉子

2) 對應的示意圖

組 合模式解決學校院系展 示的 應用例項

1) 應用例項要求

編寫程式展示乙個學校院系結構:需求是這樣,要在乙個頁面中展示出學校的院系組成,乙個學校有多個學院,乙個學院有多個系。

2) 思路分析和**(類圖)

public abstract class organizationcomponent 

protected void remove(organizationcomponent organizationcomponent)

//構造器

public organizationcomponent(string name, string des)

public string getname()

public void setname(string name)

public string getdes()

public void setdes(string des)

//方法print, 做成抽象的, 子類都需要實現

protected abstract void print();

}//university 就是 composite , 可以管理college

public class university extends organizationcomponent

// 重寫add

@override

protected void add(organizationcomponent organizationcomponent)

// 重寫remove

@override

protected void remove(organizationcomponent organizationcomponent)

@override

public string getname()

@override

public string getdes()

// print方法,就是輸出university 包含的學院

@override

protected void print() }}

public class department extends organizationcomponent

//add , remove 就不用寫了,因為他是葉子節點

@override

public string getname()

@override

public string getdes()

@override

protected void print()

}public class college extends organizationcomponent

// 重寫add

@override

protected void add(organizationcomponent organizationcomponent)

// 重寫remove

@override

protected void remove(organizationcomponent organizationcomponent)

@override

public string getname()

@override

public string getdes()

// print方法,就是輸出university 包含的學院

@override

protected void print() }}

public class client

}

組合模式的注意事項和細節

1) 簡化客戶端操作。客戶端只需要面對一致的物件而不用考慮整體部分或者節點葉子的問題。

2) 具有較強的擴充套件性。當我們要更改組合物件時,我們只需要調整內部的層次關係,客戶端不用做出任何改動.

3) 方便建立出複雜的層次結構。客戶端不用理會組合裡面的組成細節,容易新增節點或者葉子從而建立出複雜的樹形結構

4) 需要遍歷組織機構,或者處理的物件具有樹形結構時, 非常適合使用組合模式.

5) 要求較高的抽象性, 如果節點和葉子有很多差異性的話 ,比如很多方法和屬性都不一樣,不適合使用組合模式

結構型模式 組合模式

目錄 1.組合模式概述 1.1 定義 1.2 作用 1.3 應用場景 1.4 分類 1.4.1 透明組合模式 1.4.2 安全組合模式 2.類圖 3.角色 4.案例 4.1 說明 4.2 建立 4.3 分析 5.優缺點 5.1 優點 5.2 缺點 在組合模式中通過多個物件形成樹形結構以表示整體 部分...

結構型模式 組合

將物件組合成樹形結構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。組合模式 composite 經常用於樹形結構,為了簡化 使用composite可以把乙個葉子節點與乙個父節點統一起來處理。我們來看乙個具體的例子。在xml或html中,從根節點開始,每個節點都可能包...

設計模式 結構型模式

介面卡模式 adapter pattern 橋接模式 bridge pattern 過濾器模式 filter criteria pattern 組合模式 composite pattern 裝飾器模式 decorator pattern 外觀模式 facade pattern 享元模式 flywei...