The Composite Pattern states that clients should be able to interact with items, regardless of whether these objects form a hierarchy of objects or not, in a generic manner.
The advantage of using the Composite Design Pattern is that it allows for the creation of complex hierarchical structures by treating individual objects and groups of objects uniformly.
- It establishes class hierarchies that include both basic and intricate things.
- It facilitates the addition of new types of components.
- It has the advantage of having a flexible structure with easily controllable classes or interfaces.
Source code of Employee.java
package com.t4b.test.java.dp.sp.cp;
import java.util.ArrayList;
import java.util.List;
class Employee {
private String name;
private String designation;
private List<Employee> subordinates;
public Employee(String name, String designation) {
this.name = name;
this.designation = designation;
subordinates = new ArrayList<Employee>();
}
public void addSubordinate(Employee e) {
subordinates.add(e);
}
public void removeSubordinate(Employee e) {
subordinates.remove(e);
}
public List<Employee> getSubordinates() {
return subordinates;
}
@Override
public String toString() {
return "Employee [name=" + name + ", designation=" + designation + ", subordinates=" + subordinates + "]";
}
}
Source code of TestMain.java
package com.t4b.test.java.dp.sp.cp;
public class TestMain {
public static void main(String[] args) {
Employee ceo = new Employee("Smith", "CEO");
Employee salesHead = new Employee("Johnson", "Sales");
Employee marketingHead = new Employee("Williams", "Marketing");
ceo.addSubordinate(salesHead);
ceo.addSubordinate(marketingHead);
Employee programmer = new Employee("Jones", "Programmer");
marketingHead.addSubordinate(programmer);
programmer = new Employee("Brown", "Programmer");
marketingHead.addSubordinate(programmer);
Employee tester = new Employee("Davis", "Tester");
salesHead.addSubordinate(tester);
tester = new Employee("Miller", "Tester");
salesHead.addSubordinate(tester);
System.out.println(ceo);
for (Employee e : ceo.getSubordinates()) {
System.out.println(e);
for (Employee employee : e.getSubordinates()) {
System.out.println(employee);
}
}
}
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.