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 Employee
cũng có thể chứa danh sách các nhân viên cấp thấp hơn. - Code
main
trongPatternDemo
sẽ 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