Java组合模式

/ / Java组合模式

组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用一致的方法操作单个对象和组合对象。

组合关系与聚合关系的区别:

(1)组合关系   -  在古代皇帝三宫六院,贵妃很多,但是每一个贵妃只属于皇帝。

(2)聚合关系   -  一个老师有很多学生,但是每一个学生又属于多个老师。

无涯教程通过以下示例演示复合模式的使用,在该示例中将显示组织的员工层次结构。

无涯教程网

组合模式实例

有一个 Employee 类,它充当组合模式参与者类。演示类将使用 Employee 类添加到部门级别并打印所有员工。

Composite Pattern UML Diagram

第1步 -  创建具有 Employee 对象列表的 Employee 类。

Employee.java

import java.util.ArrayList;
import java.util.List;

public class Employee {
   private String name;
   private String dept;
   private int salary;
   private List<Employee> subordinates;

   //constructor
   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;
   }

   public String toString(){
      return ("Employee :[ Name : " + name + ", dept : " + dept + ", salary :" + salary+" ]");
   }   
}

第2步 -  使用 Employee 类创建和打印员工层次结构。

CompositePatternDemo.java

public class CompositePatternDemo { 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步 -  验证输出。

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 ]

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

AI重塑测试开发系统实践 -〔陈磊〕

RAG快速开发实战 -〔常扬〕

结构思考力 · 透过结构看思考 -〔李忠秋〕

全链路压测实战30讲 -〔高楼〕

Redis源码剖析与实战 -〔蒋德钧〕

Go 语言项目开发实战 -〔孔令飞〕

SQL必知必会 -〔陈旸〕

透视HTTP协议 -〔罗剑锋(Chrono)〕

持续交付36讲 -〔王潇俊〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者