Wzorce projektowe - wzór złożony
Wzorzec złożony jest używany, gdy musimy traktować grupę obiektów w podobny sposób jak pojedynczy obiekt. Wzorzec złożony składa się z obiektów w postaci struktury drzewiastej, która reprezentuje zarówno część, jak i całą hierarchię. Ten typ wzorca projektowego jest objęty wzorem strukturalnym, ponieważ ten wzór tworzy strukturę drzewiastą grupy obiektów.
Ten wzorzec tworzy klasę zawierającą grupę własnych obiektów. Ta klasa zapewnia sposoby modyfikowania grupy tych samych obiektów.
Przedstawiamy wykorzystanie wzorca złożonego na poniższym przykładzie, w którym pokażemy hierarchię pracowników w organizacji.
Realizacja
Mamy klasę Employee, która działa jako złożona klasa aktorów wzorca. CompositePatternDemo , nasza klasa demonstracyjna będzie używać klasy Employee do dodawania hierarchii na poziomie działu i drukowania wszystkich pracowników.
Krok 1
Utwórz klasę Employee zawierającą listę obiektów 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+" ]");
}
}
Krok 2
Użyj klasy Employee, aby utworzyć i wydrukować hierarchię pracowników.
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);
//print all employees of the organization
System.out.println(CEO);
for (Employee headEmployee : CEO.getSubordinates()) {
System.out.println(headEmployee);
for (Employee employee : headEmployee.getSubordinates()) {
System.out.println(employee);
}
}
}
}
Krok 3
Sprawdź dane wyjściowe.
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 ]