組合模式主要是為了表達“部分-整體”的層次結構,例如公司的組織架構,每個部門下又有若干個下級部門,再如菜單結構,每個菜單下可能有一個或多個子菜單。
下例以員工的層級結構說明組合模式的用法。每個員工都有姓名、部門、工資等屬性,每個員工可能有0個或多個下屬員工。
Employee類的代碼如下:
package composite;
import java.util.ArrayList;
import java.util.List;
public class Employee {
private String name;
private String department;
private int salary;
private List < Employee > subordinates;
//構造函數
public Employee(String name, String department, int salary) {
this.name=name;
this.department=department;
this.salary=salary;
this.subordinates=new ArrayList < Employee > ();
}
//添加下屬
public void add(Employee employee) {
subordinates.add(employee);
}
//移除下屬
public void remove(Employee employee) {
subordinates.remove(employee);
}
//獲取下屬
public List < Employee > getSubordinates(){
return subordinates;
}
//轉成字符串
public String toString() {
return "員工(姓名:"+name+",部門:"+department+",工資:"+salary+")";
}
}
主函數調用方式:
package main;
import composite.*;
public class CompositePattern {
public static void main(String[] args) {
//創建一個員工:總裁
Employee president = new Employee("李剛","管理層",30000);
//創建兩個員工:部門領導
Employee directorSales = new Employee("王孟","銷售部",20000);
Employee directorRND = new Employee("嚴明","研發部",20000);
//創建兩個員工:銷售部銷售員
Employee saler1 = new Employee("孟德貴","銷售部",10000);
Employee saler2 = new Employee("肖亮高","銷售部",10000);
//創建兩個員工:研發部工程師
Employee engineer1 = new Employee("左弓成","研發部",10000);
Employee engineer2 = new Employee("成顏發","研發部",10000);
//總裁添加下屬
president.add(directorSales);
president.add(directorRND);
//銷售部部門領導添加下屬
directorSales.add(saler1);
directorSales.add(saler2);
//研發部部門領導添加下屬
directorRND.add(engineer1);
directorRND.add(engineer2);
//打印輸出所有員工
System.out.println(president);
for(Employee directorEmployee: president.getSubordinates()) {
System.out.println(directorEmployee);
for(Employee employee: directorEmployee.getSubordinates()) {
System.out.println(employee);
}
}
}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
JAVA
+關注
關注
20文章
2986瀏覽量
107037 -
JAVA語言
+關注
關注
0文章
138瀏覽量
20539
發布評論請先 登錄
相關推薦
熱點推薦
ADS52J90配置成了test pattern模式,ADC傳輸回來的pattern值出現錯位現象,為什么?
調試ADS52J90這款芯片時,先將芯片配置成了test pattern模式,但是ADC傳輸回來的pattern值出現錯位現象,抓取frame clk時發現在設定某些特定的pattern
發表于 01-03 07:21
dlpc3470 Splash Pattern模式為什么會設置最大Pattern周期,這個最大周期能否更改?
dlpc3470 Splash Pattern 模式為什么會設置最大 Pattern 周期,這個最大周期能否更改?
發表于 02-19 08:41
lightcrafter4500. Pattern sequence模式下,圖像源(pattern source)中Video port怎么使用?
你好,我們在做三維測量,需要通過該模塊投影結構光。但是lightcrafter4500 的閃存大小只有32MB,不能將所需的結構光圖像完全存入。因此,在使用Pattern sequence模式
發表于 02-28 07:38
請問external pattern sequence子模式的正確使用方式是什么?
在做結構光成像的相關研究中,想投影大量正弦條紋圖(比如60張)并配合相機實現外觸發,根據查閱用戶手冊和編程手冊,應該將lightcrafter設置為hdmi模式下的external pattern
發表于 02-28 08:38
嵌入式C語言軟件設計之裝飾器模式(Decorator Pattern)
裝飾器模式(Decorator Pattern),是結構型設計模式的一種,裝飾器模式允許向一個現有的對象添加新的功能,而又不改變其對象結構,這種方式比使用子類繼承的方式更加靈活。
發表于 03-01 10:55
?559次閱讀
評論