Composite được hiểu nôm na là tổng hợp. Composite được sử dụng khi chúng ta muốn làm việc với một nhóm các object như một object đơn duy nhất. Composite được xếp vào nhóm các pattern Kiến Trúc.
Composite tạo ra một class có chứa nhóm các object của chính class đó và đồng thời cung cấp các phương thức để làm việc với nhóm các object này.
Áp dụng triển khai

- Chúng ta có một phần mềm mô tả kiến trúc nhân sự của một cửa hàng.
01 class Employeeđược tạo ra để mô tả thực thể nhân viên.- Mỗi
object Employeecũng có thể chứa danh sách các nhân viên cấp thấp hơn. - Code
maintrongPatternDemosẽ sử dụngclass Employeeđể tạo một kiến trúc nhân sự và in ra danh sách tất cả các nhân viên.
Bước 1
Tạo class Employee.
compositepattern/Employee.java
packagecompositepattern;importjava.util.ArrayList;importjava.util.List;publicclassEmployee{privateString name;privateString role;privateint salary;privateList<Employee> subordinateList;publicEmployee(String name,String role,int salary
){this.name = name;this.salary = salary;this.role = role;this.subordinateList =newArrayList<Employee>();}publicvoidaddSub(Employee emp){
subordinateList.add(emp);}publicvoidremoveSub(Employee emp){
subordinateList.remove(emp);}publicList<Employee>getSubList(){return subordinateList;}publicStringtoString(){return"Employee: [ Name: "+ name +", Role: "+ role +", Salary : "+ salary+" ]";}}
Bước 2
Sử dụng class Employee để tạo và in danh sách nhân viên.
PatternDemo.java
importcompositepattern.Employee;publicclassPatternDemo{publicstaticvoidmain(String[] args){Employee CEO =newEmployee("John","CEO",30000);Employee headSales =newEmployee("Robert","Head Sales",20000);
CEO.addSub(headSales);Employee headMarketing =newEmployee("Micheal","Head Marketing",20000);
CEO.addSub(headMarketing);Employee sale1 =newEmployee("Richard","Sales",10000);
headSales.addSub(sale1);Employee sale2 =newEmployee("Rob","Sales",10000);
headSales.addSub(sale2);Employee clerk1 =newEmployee("Laura","Marketing",10000);
headMarketing.addSub(clerk1);Employee clerk2 =newEmployee("Ryan","Marketing",10000);
headMarketing.addSub(clerk2);// in danh sách tất cả các nhân viênSystem.out.println(CEO);for(Employee headEmployee : CEO.getSubList()){System.out.println(headEmployee);for(Employee employee : headEmployee.getSubList()){System.out.println(employee);}}}}
Bước 3
Kiểm chứng lại kết quả được in ra ở console.
console
Employee:[Name:John,Role: CEO,Salary:30000]Employee:[Name:Robert,Role:HeadSales,Salary:20000]Employee:[Name:Richard,Role:Sales,Salary:10000]Employee:[Name:Rob,Role:Sales,Salary:10000]Employee:[Name:Micheal,Role:HeadMarketing,Salary:20000]Employee:[Name:Laura,Role:Marketing,Salary:10000]Employee:[Name:Ryan,Role:Marketing,Salary:10000]
Nguồn: viblo.asia
