Skip to content

Latest commit

 

History

History
72 lines (66 loc) · 1.7 KB

composite.md

File metadata and controls

72 lines (66 loc) · 1.7 KB

Composite

Description

Allowing to treat an individual object and compositions of the same object the same way

Diagram

Code

Check code here

// Component
public interface Department { 
    void printName();
}
// Leaf components
public class HRDepartment implements Department {
    private String name;
    public HRDepartment(String name) {
        this.name = name;
    }
    @Override
    public void printName() {
        System.out.println(name);
    }
}
public class SalesDepartment implements Department {
    private String name;
    public SalesDepartment(String name) {
        this.name = name;
    }
    @Override
    public void printName() {
        System.out.println(name);
    }
}
// Composite
public class HeadDepartment implements Department {
    private String name;
    private List<Department> departments;
    public HeadDepartment(String name) {
        this.name = name;
        departments = new ArrayList<>();
    }
    @Override
    public void printName() {
        departments.forEach(Department::printName);;
    }
    public void addDepartment(Department department) {
        departments.add(department);
    }
    public void removeDepartment(Department department) {
        departments.remove(department);
    }
}

To access the instance

HeadDepartment headDepartment = new HeadDepartment("HeadDepartment");
headDepartment.addDepartment(new HRDepartment("HRDepartment"));
headDepartment.addDepartment(new SalesDepartment("SalesDepartment"));
headDepartment.printName();

Use cases

  • Folder (is a folder itself, and can contains folders)
  • Hierarchies
  • ...