日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java常用设计模式————组合模式

發布時間:2025/3/12 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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常用设计模式————组合模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。