Entwurfsmuster - Verbundmuster
Ein zusammengesetztes Muster wird verwendet, wenn eine Gruppe von Objekten auf ähnliche Weise wie ein einzelnes Objekt behandelt werden muss. Das zusammengesetzte Muster setzt Objekte in Form einer Baumstruktur zusammen, um sowohl eine Teil- als auch eine ganze Hierarchie darzustellen. Diese Art von Entwurfsmuster fällt unter ein Strukturmuster, da dieses Muster eine Baumstruktur einer Gruppe von Objekten erstellt.
Dieses Muster erstellt eine Klasse, die eine Gruppe eigener Objekte enthält. Diese Klasse bietet Möglichkeiten zum Ändern der Gruppe derselben Objekte.
Wir demonstrieren die Verwendung eines zusammengesetzten Musters anhand des folgenden Beispiels, in dem wir die Mitarbeiterhierarchie einer Organisation zeigen.
Implementierung
Wir haben eine Klasse Employee, die als Composite Pattern Actor Class fungiert. CompositePatternDemo , unsere Demo-Klasse, verwendet die Employee- Klasse, um Hierarchien auf Abteilungsebene hinzuzufügen und alle Mitarbeiter zu drucken.
Schritt 1
Erstellen Sie eine Mitarbeiterklasse mit einer Liste von Mitarbeiterobjekten .
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+" ]");
}
}
Schritt 2
Verwenden Sie die Employee- Klasse, um eine Mitarbeiterhierarchie zu erstellen und zu drucken.
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);
}
}
}
}
Schritt 3
Überprüfen Sie die Ausgabe.
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 ]