Java常用设计模式————组合模式
生活随笔
收集整理的這篇文章主要介紹了
Java常用设计模式————组合模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言
組合模式,是一種類似遞歸算法的結構性設計模式,通過以簡單的 List ,組合本類對象,實現樹狀對象結構的“部分、整體”的層次。
它可以讓調用程序不需要關心復雜對象與簡單對象的區別,而統一地實現處理邏輯。
對于個體與整體存在一定共性的數據場景的展示非常有幫助,比如省市區的樹狀結構,領導與員工、校院系等。
一、組合模式的類圖結構
用套娃形容組合模式非常貼切,其編碼核心其實就是用數組來組合下級對象,而下級對象本身也屬于此類實例。一般就是用于描述某種極具共性的實體類,如省、市、區;領導、員工等。
二、組合模式的代碼實現
package com.mht.demo.組合模式;import java.util.ArrayList; import java.util.List;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;this.subordinates = new ArrayList<>();}public void add(Employee emp) {this.subordinates.add(emp);}public void remove(Employee emp) {this.subordinates.remove(emp);}public List<Employee> getSubordinates() {return subordinates;}@Overridepublic String toString() {return "{\"name\":\"" + name + "\", \"dept\":\"" + dept + "\", \"salary\":\"" + salary + "\", \"subordinates\":"+ subordinates + "}";} }測試代碼:
public class Client {public static void main(String[] args) {// 最上層員工,同時也是最高領導Employee ceo = new Employee("馬云", "CEO", 30000);// 中層員工,同時也是中層領導Employee headSales = new Employee("Robert", "銷售部", 20000);Employee headMarketing = new Employee("Michel", "市場部", 20000);// 基層員工,奮斗在業務一線Employee salesEmp = new Employee("Richard", "銷售部", 10000);Employee salesEmp2 = new Employee("Rob", "銷售部", 10000);Employee marketEmp = new Employee("Laura", "市場部", 10000);Employee marketEmp2 = new Employee("Bob", "市場部", 10000);ceo.add(headSales);ceo.add(headMarketing);headSales.add(salesEmp);headSales.add(salesEmp2);headMarketing.add(marketEmp);headMarketing.add(marketEmp2);// 打印CEO的管理層級System.out.println("CEO的管理層級:" + ceo);for (Employee headEmp : ceo.getSubordinates()) {System.out.println(headEmp);for (Employee subEmp : headEmp.getSubordinates()) {System.out.println(subEmp);}}} }測試結果:
CEO的管理層級:{"name":"馬云", "dept":"CEO", "salary":"30000", "subordinates":[{"name":"Robert", "dept":"銷售部", "salary":"20000", "subordinates":[{"name":"Richard", "dept":"銷售部", "salary":"10000", "subordinates":[]}, {"name":"Rob", "dept":"銷售部", "salary":"10000", "subordinates":[]}]}, {"name":"Michel", "dept":"市場部", "salary":"20000", "subordinates":[{"name":"Laura", "dept":"市場部", "salary":"10000", "subordinates":[]}, {"name":"Bob", "dept":"市場部", "salary":"10000", "subordinates":[]}]}]} {"name":"Robert", "dept":"銷售部", "salary":"20000", "subordinates":[{"name":"Richard", "dept":"銷售部", "salary":"10000", "subordinates":[]}, {"name":"Rob", "dept":"銷售部", "salary":"10000", "subordinates":[]}]} {"name":"Richard", "dept":"銷售部", "salary":"10000", "subordinates":[]} {"name":"Rob", "dept":"銷售部", "salary":"10000", "subordinates":[]} {"name":"Michel", "dept":"市場部", "salary":"20000", "subordinates":[{"name":"Laura", "dept":"市場部", "salary":"10000", "subordinates":[]}, {"name":"Bob", "dept":"市場部", "salary":"10000", "subordinates":[]}]} {"name":"Laura", "dept":"市場部", "salary":"10000", "subordinates":[]} {"name":"Bob", "dept":"市場部", "salary":"10000", "subordinates":[]}格式化后的結果:
{"name":"馬云","dept":"CEO","salary":"30000","subordinates":[{"name":"Robert","dept":"銷售部","salary":"20000","subordinates":[{"name":"Richard","dept":"銷售部","salary":"10000","subordinates":[]},{"name":"Rob","dept":"銷售部","salary":"10000","subordinates":[]}]},{"name":"Michel","dept":"市場部","salary":"20000","subordinates":[{"name":"Laura","dept":"市場部","salary":"10000","subordinates":[]},{"name":"Bob","dept":"市場部","salary":"10000","subordinates":[]}]}] }總結
組合模式的使用場景非常特定,一般就是在輸出打印樹狀結構型數據時才會用到。
它模糊了簡單元素和復雜元素的概念,客戶端程序可以像處理簡單元素一樣來處理復雜元素,從而使客戶端與復雜元素的內部結構解耦。
定義時,通過List組織自身對象。同時也并未用到抽象類或接口。
注意為數組提供必要的添加和移除方法。
?
總結
以上是生活随笔為你收集整理的Java常用设计模式————组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php四则运算出题器_php实现简单四则
- 下一篇: 计算机桌面设置定时,如何设置可以每月自动