Код IT
← Каталог

'Паттерн "Компоновщик" (Composite) в Java — дерево отдела и единый интерфейс' — Пример — структура отдела

Фрагмент из «'Паттерн "Компоновщик" (Composite) в Java — дерево отдела и единый интерфейс'»: Пример — структура отдела.

java projectencyclopedia7-06-proektirovanie-i-arhitektura-design-patterns-132 embed URL статья в энциклопедии
Java main.java
import java.util.ArrayList;
import java.util.List;

interface OrganizationUnit {
    String getName();
    long getSalary();
}

class Employee implements OrganizationUnit {
    private final String name;
    private final long salary;

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

    @Override
    public String getName() {
        return name;
    }

    @Override
    public long getSalary() {
        return salary;
    }
}

class Department implements OrganizationUnit {
    private final String name;
    private final List<OrganizationUnit> units = new ArrayList<>();

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

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

    @Override
    public String getName() {
        return name;
    }

    @Override
    public long getSalary() {
        return units.stream().mapToLong(OrganizationUnit::getSalary).sum();
    }
}
import java.util.ArrayList;
import java.util.List;

interface OrganizationUnit {
    String getName();
    long getSalary();
}

class Employee implements OrganizationUnit {
    private final String name;
    private final long salary;

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

    @Override
    public String getName() {
        return name;
    }

    @Override
    public long getSalary() {
        return salary;
    }
}

class Department implements OrganizationUnit {
    private final String name;
    private final List<OrganizationUnit> units = new ArrayList<>();

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

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

    @Override
    public String getName() {
        return name;
    }

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