Composite Design Pattern

Back To Index

Overview

The Composite Design Pattern allows you to compose objects into tree structures to represent part-whole hierarchies. It enables clients to treat individual objects and compositions of objects uniformly.

Key Characteristics

Implementation

The following is an example of a Composite implementation in Java:


import java.util.ArrayList;
import java.util.List;

// Component
interface Employee {
    void showDetails();
}

// Leaf
class Developer implements Employee {
    private String name;
    private String position;

    public Developer(String name, String position) {
        this.name = name;
        this.position = position;
    }

    @Override
    public void showDetails() {
        System.out.println(name + " works as a " + position);
    }
}

// Leaf
class Manager implements Employee {
    private String name;
    private String position;

    public Manager(String name, String position) {
        this.name = name;
        this.position = position;
    }

    @Override
    public void showDetails() {
        System.out.println(name + " works as a " + position);
    }
}

// Composite
class Directory implements Employee {
    private List employees = new ArrayList<>();

    public void addEmployee(Employee employee) {
        employees.add(employee);
    }

    public void removeEmployee(Employee employee) {
        employees.remove(employee);
    }

    @Override
    public void showDetails() {
        for (Employee employee : employees) {
            employee.showDetails();
        }
    }
}

// Demo
public class CompositeDemo {
    public static void main(String[] args) {
        Developer dev1 = new Developer("John", "Frontend Developer");
        Developer dev2 = new Developer("Jane", "Backend Developer");

        Manager manager1 = new Manager("Alice", "Project Manager");

        Directory directory = new Directory();
        directory.addEmployee(dev1);
        directory.addEmployee(dev2);
        directory.addEmployee(manager1);

        directory.showDetails();
    }
}
    

When to Use

Advantages

Disadvantages

Back To Index