Pattern pattern composite composite - design patterns - télé

Pattern Composite

Catégorie : Structure

Objectif du pattern

Organiser les objets en structure arborescente afin de représenter une hiérarchie.

Permettre à la partie cliente de manipuler un objet unique et un objet composé de la même manière.

Résultat : Le Design Pattern Composite isole l'appartenance à un agrégat.

Raison d’utilisation

Le système comporte une hiérarchie avec un nombre de niveaux non déterminé.

Il est nécessaire de pouvoir considérer un groupe d’éléments comme un élément unique, par exemple dans un logiciel de DAO où plusieurs éléments graphiques peuvent être regroupés en un nouvel élément graphique.

Chaque élément est un composant potentiel. En plus des éléments classiques, il existe un élément composite qui peut être composé de plusieurs composants.

Comme l’élément composite est un composant potentiel, il peut contenir d’autres éléments composites.

Responsabilités

Composant

Définit l'interface d'un objet pouvant être un composant d'un autre objet de l'arborescence.

Élément

Implémente un objet de l'arborescence n'ayant pas d'autres composants.

Composite

Implémente un objet de l'arborescence pouvant contenir un ou plusieurs autres composants.

La partie client manipule les objets par l'interface Composant.

Implémentation

Classe abstraite Composant

public abstract class Composant {
    protected String nom;
    protected int level;

    public Composant(String nom) {
        this.nom = nom;
    }

    public abstract void operation();
}

Classe Élément

public class Element extends Composant {
    public Element(String nom) {
        super(nom);
    }

    @Override
    public void operation() {
        String tab = "";
        for (int i = 0; i < level; i++) {
            tab += "--";
        }
        System.out.println(tab + "Opération sur l'élément (" + nom + ")");
    }
}

Classe Composite

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

public class Composite extends Composant {
    private List composants = new ArrayList();

    public Composite(String nom) {
        super(nom);
    }

    @Override
    public void operation() {
        String tab = "";
        for (int i = 0; i < level; i++) {
            tab += "--";
        }
        System.out.println(tab + "Opération sur un composite(" + nom + ")");
        for (Composant composant : composants) {
            composant.operation();
        }
    }

    public void add(Composant composant) {
        composant.level = this.level + 1;
        composants.add(composant);
    }

    public void remove(Composant composant) {
        composants.remove(composant);
    }

    public List getChilds() {
        return composants;
    }
}

Exemple d'utilisation

public class Application {
    public static void main(String[] args) {
        Composite racine = new Composite("Composite 1");
        Composite composite2 = new Composite("Composite 2");

        racine.add(composite2);
        racine.add(new Element("Elément 11"));
        racine.add(new Element("Elément 12"));
        racine.add(new Element("Elément 13"));

        composite2.add(new Element("Elément 21"));
        composite2.add(new Element("Elément 22"));

        racine.operation();
    }
}

Résultat de l'exécution

:Composite
nom="Composite 1" level=0

:Composite
nom="Composite 2" level=1

:Element
nom="Elément 21" level=2

:Element
nom="Elément 22" level=2

:Element
nom="Elément 11" level=1

:Element
nom="Elément 11" level=1

:Element
nom="Elément 12" level=1

:Element
nom="Elément 13" level=1

Opération sur un composite(Composite 1)
-- Opération sur un composite(Composite 2)
---- Opération sur l'élément (Elément 21)
---- Opération sur l'élément (Elément 22)
-- Opération sur l'élément (Elément 11)
-- Opération sur l'élément (Elément 12)
-- Opération sur l'élément (Elément 13)

FAQ

Quelle est la différence entre un Élément et un Composite dans le pattern Composite ?

Un Élément est un objet simple sans sous-composants, tandis qu'un Composite est un objet qui peut contenir d'autres Composants (Élément ou Composite). Ils partagent la même interface, ce qui permet une manipulation uniforme.

Pourquoi utiliser le pattern Composite ?

Il permet de simplifier la gestion des structures hiérarchiques en traitant les objets simples et composés de manière identique, facilitant ainsi l'ajout ou la suppression de composants.

Comment est représentée la hiérarchie dans le pattern Composite ?

La hiérarchie est représentée par une structure arborescente où chaque Composant peut contenir des Composants enfants, créant ainsi une relation parent-enfant.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne