8.結構型-組合模式
1.組合模式介紹
a.組合模式(Composite Pattern),又叫部分整體模式,它建立了物件組的樹形結構,將物件組合成樹狀結構以表示“整體-部分”的層次關係。
b.組合模式依據樹形結構來組合物件,用來表示部分以及整體層次。
c.這種型別的設計模式屬於結構型模式。
d.組合模式使得使用者對單個物件和組合物件的訪問具有一致性,即:組合能讓客戶以一致的方式處理個別物件以及組合物件
2.原理類圖
a. Component :這是組合中物件宣告介面,在適當情況下,實現所有類共有的介面預設行為,用於訪問和管理Component 子部件, Component 可以是抽象類或者介面
b.Leaf : 在組合中表示葉子節點,葉子節點沒有子節點
c.Composite :非葉子節點, 用於儲存子部件, 在 Component 介面中實現 子部件的相關操作,比如增加(add), 刪除。
package com.zjc.designmode.composite;
import java.util.ArrayList;
import java.util.List;
/**
* @author : zoujc
* @date : 2020/11/10
* @description : 組合模式
*/
public class Employee {
private String name;
private String dept;
private int salary;
private List<Employee> subordinates;
//建構函式
public Employee(String name,String dept, int sal) {
this.name = name;
this.dept = dept;
this.salary = sal;
subordinates = new ArrayList<Employee>();
}
public void add(Employee e) {
subordinates.add(e);
}
public void remove(Employee e) {
subordinates.remove(e);
}
public List<Employee> getSubordinates(){
return subordinates;
}
@Override
public String toString(){
return ("Employee :[ Name : "+ name
+", dept : "+ dept + ", salary :"
+ salary+" ]");
}
}
package com.zjc.designmode.composite;
/**
* @author : zoujc
* @date : 2020/11/10
* @description :
*/
public class Client {
public static void main(String[] args) {
Employee CEO = new Employee("John","CEO", 30000);
Employee headSales = new Employee("Robert","Head Sales", 20000);
Employee headMarketing = new Employee("Michel","Head Marketing", 20000);
Employee clerk1 = new Employee("Laura","Marketing", 10000);
Employee clerk2 = new Employee("Bob","Marketing", 10000);
Employee salesExecutive1 = new Employee("Richard","Sales", 10000);
Employee salesExecutive2 = new Employee("Rob","Sales", 10000);
CEO.add(headSales);
CEO.add(headMarketing);
headSales.add(salesExecutive1);
headSales.add(salesExecutive2);
headMarketing.add(clerk1);
headMarketing.add(clerk2);
//列印該組織的所有員工
System.out.println(CEO);
for (Employee headEmployee : CEO.getSubordinates()) {
System.out.println(headEmployee);
for (Employee employee : headEmployee.getSubordinates()) {
System.out.println(employee);
}
}
}
}
3.HaspMap使用了組合模式
Map就是個抽象的構建(類似於Component)
HashMap是一箇中間的構建(Composite),實現/繼承了相關方法
Node是HaspMap的內部類,類似於Leaf的葉子結點,這裡就沒有put,putAll
4.組合模式注意事項
a.簡化客戶端操作。客戶端只需要面對一致的物件而不用考慮整體部分或者節點葉子的問題。
b.具有較強的擴充套件性。當我們要更改組合物件時,我們只需要調整內部的層次關係,客戶端不用做出任何改動.
c.方便建立出複雜的層次結構。客戶端不用理會組合裡面的組成細節,容易新增節點或者葉子從而建立出複雜的樹形結構
d.需要遍歷組織機構,或者處理的物件具有樹形結構時, 非常適合使用組合模式.
e.要求較高的抽象性,如果節點和葉子有很多差異性的話,比如很多方法和屬性都不一樣,不適合使用組合模式
相關文章
- 【設計模式自習室】結構型:組合模式 Composite設計模式
- 設計模式(十四、十五)----結構型模式之組合模式設計模式
- 結構型:策略模式模式
- 結構型-代理模式模式
- 結構型設計模式設計模式
- 極簡架構模式-組合實體模式架構模式
- 梳理公司的組織架構 — 組合模式架構模式
- 設計模式系列之組合模式(Composite Pattern)——樹形結構的處理設計模式
- 設計模式之代理模式(結構型)設計模式
- 結構型-裝飾器模式模式
- (Java)設計模式:結構型Java設計模式
- 組合模式模式
- 【設計模式】第九篇:組合模式解決層級關係結構問題設計模式
- 設計模式《組合模式》設計模式
- 【設計模式】組合模式設計模式
- 設計模式-組合模式設計模式
- 組合模式(Composite)模式
- 大話 PHP 設計模式--結構型PHP設計模式
- 物件導向-設計模式-結構型物件設計模式
- 設計模式學習筆記(十三)組合模式及其在樹形結構中的應用設計模式筆記
- js設計模式–組合模式JS設計模式
- js設計模式--組合模式JS設計模式
- 設計模式系列 – 組合模式設計模式
- 聊一聊設計模式(三)-- 結構型設計模式設計模式
- composite pattern(組合模式)模式
- 《設計模式》 - 8. 外觀模式( Facade )設計模式
- PHP 設計模式之組合模式PHP設計模式
- 《Head First 設計模式》:組合模式設計模式
- 設計模式系列之「組合模式」設計模式
- 軟體設計模式————(組合模式)設計模式
- GoLang設計模式20 - 組合模式Golang設計模式
- 極簡設計模式-組合模式設計模式
- 設計模式【11】-- 搞定組合模式設計模式
- 徒手擼設計模式-組合模式設計模式
- 【C++設計模式】組合模式C++設計模式
- JAVA設計模式 5【結構型】代理模式的理解與使用Java設計模式
- python 多型、組合、反射Python多型反射
- 組合資料型別資料型別