Java 组合模式

Java 组合模式 首页 / 设计模式入门教程 / Java 组合模式

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

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

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

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

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

链接:https://www.learnfk.comhttps://www.learnfk.com/design-pattern/composite-pattern.html

来源:LearnFk无涯教程网

组合模式实例

有一个 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 ]

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

快速上手Kotlin开发 -〔张涛〕

OpenResty从入门到实战 -〔温铭〕

SQL必知必会 -〔陈旸〕

NLP实战高手课 -〔王然〕

TensorFlow 2项目进阶实战 -〔彭靖田〕

分布式数据库30讲 -〔王磊〕

技术管理案例课 -〔许健〕

深度学习推荐系统实战 -〔王喆〕

结构思考力 · 透过结构看问题解决 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)