JavaCompositePattern(組合模式)
組合模式(Composite Pattern),又叫部分整體模式,是用於把一組相似的物件當作一個單一的物件。組合模式依據樹形結構來組合物件,用來表示部分以及整體層次。這種型別的設計模式屬於結構型模式,它建立了物件組的樹形結構。
這種模式建立了一個包含自己物件組的類。該類提供了修改相同物件組的方式。
優點: 1、高層模組呼叫簡單。 2、節點自由增加。
缺點:在使用組合模式時,其葉子和樹枝的宣告都是實現類,而不是介面,違反了依賴倒置原則。
關鍵程式碼:樹枝內部組合該介面,並且含有內部屬性 List,裡面放 Component。
- 建立 Employee 類,該類帶有 Employee 物件的列表。
/**
* 1. 建立 Employee 類,該類帶有 Employee 物件的列表。
* @author mazaiting
*/
public class Employee {
/**姓名*/
private String name;
/**職位*/
private String dept;
/**工資*/
private int salary;
private List<Employee> subordinates;
public Employee(String name, String dept, int salary) {
this.name = name;
this.dept = dept;
this.salary = salary;
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 + "]";
}
}
- 使用 Employee 類來建立和列印員工的層次結構。
/**
* 2. 使用 Employee 類來建立和列印員工的層次結構。
* @author mazaiting
*/
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);
}
}
}
}
- 列印結果
Employee [name=John, dept=CEO, salary=30000]
Employee [name=Robert, dept=Head Sales, salary=20000]
Employee [name=Richard, dept=Sales, salary=10000]
Employee [name=Rob, dept=Sales, salary=10000]
Employee [name=Michel, dept=Head Marketing, salary=20000]
Employee [name=Laura, dept=Marketing, salary=10000]
Employee [name=Bob, dept=Marketing, salary=10000]
相關文章
- 組合模式模式
- 【設計模式】組合模式設計模式
- 設計模式《組合模式》設計模式
- 設計模式-組合模式設計模式
- 設計模式:組合模式設計模式
- js設計模式–組合模式JS設計模式
- js設計模式--組合模式JS設計模式
- 設計模式系列 – 組合模式設計模式
- javascript設計模式組合模式JavaScript設計模式
- 設計模式(十三):組合模式設計模式
- 組合模式(Composite)模式
- PHP 設計模式之組合模式PHP設計模式
- GoLang設計模式20 - 組合模式Golang設計模式
- 設計模式【11】-- 搞定組合模式設計模式
- 【C++設計模式】組合模式C++設計模式
- 徒手擼設計模式-組合模式設計模式
- 極簡設計模式-組合模式設計模式
- 設計模式系列之「組合模式」設計模式
- 大話設計模式—組合模式設計模式
- 軟體設計模式————(組合模式)設計模式
- composite pattern(組合模式)模式
- 結構型-組合模式模式
- 23種設計模式之組合模式設計模式
- 《Head First 設計模式》:組合模式設計模式
- Java設計模式之(十)——組合模式Java設計模式
- 【趣味設計模式系列】之【組合模式】設計模式
- javascript設計模式 之 7組合模式JavaScript設計模式
- 設計模式系列7--組合模式設計模式
- 設計模式漫談之組合模式設計模式
- C#設計模式之組合模式C#設計模式
- 組合模式(Composite)的安全模式與透明模式模式
- c#設計模式_全部部分模式_組合模式C#設計模式
- 梳理公司的組織架構 — 組合模式架構模式
- 梳理公司的組織架構 --- 組合模式架構模式
- Java 組合模式及其應用Java模式
- 不學無數——組合模式模式
- c#組合模式詳解C#模式
- JavaCompositeEntityPattern(組合實體模式)Java模式