Vous êtes sur la page 1sur 6

Exemple d’implémentation du Composite pattern

Passons maintenant à l'implémentation. Supposons que nous voulions construire une structure hiérarchique de
départements dans une entreprise.

Le composant de base
En tant qu'objet composant, nous définirons une interface Department simple :

public interface Department {


void printDepartmentName();
}
• Feuilles
Pour les composants feuille, définissons des classes pour les services
financiers et commerciaux :

public class FinancialDepartment implements Department {

private Integer id;


private String name;

public void printDepartmentName() {


System.out.println(getClass().getSimpleName());
}

// standard constructor, getters, setters


}
• La deuxième classe feuille, SalesDepartment, est similaire :

public class SalesDepartment implements Department {

private Integer id;


private String name;

public void printDepartmentName() {


System.out.println(getClass().getSimpleName());
}

// standard constructor, getters, setters


}

Les deux classes implémentent la méthode printDepartmentName() à partir du composant


de base, où elles impriment les noms de classe pour chacune d'elles.
•  L'élément composite

public class HeadDepartment implements Department {


private Integer id;
private String name;

private List<Department> childDepartments;

public HeadDepartment(Integer id, String name) {


this.id = id;
this.name = name;
this.childDepartments = new ArrayList<>();
}

public void printDepartmentName() {


childDepartments.forEach(Department::printDepartmentName);
}

public void addDepartment(Department department) {


childDepartments.add(department);
}

public void removeDepartment(Department department) {


childDepartments.remove(department);
• Il s'agit d'une classe composite car elle contient une collection
de composants Department , ainsi que des méthodes pour ajouter et
supprimer des éléments de la liste.
• La méthode composite printDepartmentName() est implémentée en itérant
sur la liste des éléments feuille et en appelant la méthode appropriée pour
chacun.

Tests
public class CompositeDemo {
public static void main(String args[]) {
Department salesDepartment = new SalesDepartment(
1, "Sales department");
Department financialDepartment = new FinancialDepartment(
2, "Financial department");

HeadDepartment headDepartment = new HeadDepartment(


3, "Head department");

headDepartment.addDepartment(salesDepartment);
headDepartment.addDepartment(financialDepartment);

headDepartment.printDepartmentName();
}
}
Tout d'abord, nous créons deux instances pour les services financier et commercial. Ensuite, nous instancions le
département principal et lui ajoutons les instances précédemment créées.

Enfin, nous pouvons tester la méthode de composition printDepartmentName() . Comme prévu, la sortie contient les
noms de classe de chaque composant feuille :
SalesDepartment
FinancialDepartment

Vous aimerez peut-être aussi