TGViewer
Библиотека собеса по Java | вопросы с собеседований Библиотека собеса по Java | вопросы с собеседований @java_interview_lib · 6.44K subscribers
Post #1334 1.09K
Расскажите о паттерне Composite

Composite — это структурный паттерн, который позволяет сгруппировать объекты в древовидную структуру и работать с ней так же, как с единичным объектом.

Простыми словами: файл и папка с файлами обрабатываются одинаково — у обоих можно спросить размер, удалить, переместить.

▪️ Пример:

Структура отдела в компании: сотрудник и команда состоят в одной иерархии. Нужно посчитать общую зарплату по любой ветке.

// Общий интерфейс
interface OrganizationUnit {
String getName();
long getSalary();
}

// Лист — отдельный сотрудник
class Employee implements OrganizationUnit {
private final String name;
private final long salary;

public Employee(String name, long salary) {
this.name = name;
this.salary = salary;
}

public String getName() { return name; }
public long getSalary() { return salary; }
}

// Композит — отдел, содержит другие элементы
class Department implements OrganizationUnit {
private final String name;
private final List<OrganizationUnit> units = new ArrayList<>();

public Department(String name) {
this.name = name;
}

public void add(OrganizationUnit unit) {
units.add(unit);
}

public String getName() { return name; }

public long getSalary() {
return units.stream()
.mapToLong(OrganizationUnit::getSalary)
.sum();
}
}

// Использование
Department dev = new Department("Разработка");
dev.add(new Employee("Анна", 200_000));
dev.add(new Employee("Борис", 180_000));

Department company = new Department("Компания");
company.add(dev);
company.add(new Employee("CEO Иван", 500_000));

System.out.println(company.getSalary()); // 880000


▪️ Когда использовать

Данные образуют древовидную структуру (файловая система, меню, оргструктура)
Клиентский код должен одинаково работать с простыми и составными объектами

▪️ Минус

Трудно ограничить типы компонентов внутри композита — приходится проверять в runtime.

🐸 Библиотека собеса по Java

#patterns
  • 👍 6
  • ❤ 1
  • 🔥 1
More from @java_interview_lib
  1. Sep 15, 2026❓ Расскажите о паттерне Facade Facade — это структурный паттерн, который предоставляет про…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Aug 5, 2026❓ Что такое "diamond problem" и как его решает Java? «Diamond problem» возникает при множе…
  4. Aug 5, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
  5. Aug 5, 2026Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
  6. Jul 31, 2026❓ Как работает ConcurrentHashMap? ConcurrentHashMap использует сегментирование / распростр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →