Le modèle de conception Composite est l’un des modèles de conception structurels. Le modèle de conception Composite est utilisé lorsque nous devons représenter une hiérarchie partie-ensemble.
Modèle de conception Composite
Lorsque nous avons besoin de créer une structure de manière à ce que les objets dans la structure soient traités de la même manière, nous pouvons appliquer le modèle de conception Composite. Commençons par comprendre cela avec un exemple de la vie réelle – un diagramme est une structure qui se compose d’objets tels que des cercles, des lignes, des triangles, etc. Lorsque nous remplissons le dessin avec une couleur (disons rouge), la même couleur est également appliquée aux objets du dessin. Ici, le dessin est composé de différentes parties et elles ont toutes les mêmes opérations. Le modèle Composite se compose des objets suivants.
- Composant de base – Le composant de base est l’interface pour tous les objets de la composition, le programme client utilise le composant de base pour travailler avec les objets de la composition. Il peut s’agir d’une interface ou d’une classe abstraite avec des méthodes communes à tous les objets.
- Feuille – Définit le comportement des éléments dans la composition. C’est le bloc de construction de la composition et implémente le composant de base. Il n’a pas de références vers d’autres composants.
- Composite – Il est composé d’éléments feuilles et implémente les opérations dans le composant de base.
Ici, j’applique le modèle de conception composite pour le scénario de dessin.
Composant de Base du Modèle Composite
Le composant de base du modèle composite définit les méthodes communes pour les feuilles et les composites. Nous pouvons créer une classe Forme
avec une méthode dessiner(String couleur)
pour dessiner la forme avec la couleur donnée. Forme.java
package com.journaldev.design.composite;
public interface Shape {
public void draw(String fillColor);
}
Objets Feuilles du Modèle de Conception Composite
Les objets feuilles du modèle de conception composite implémentent le composant de base et constituent les éléments de base pour le composite. Nous pouvons créer plusieurs objets feuilles tels que Triangle, Cercle, etc. Triangle.java
package com.journaldev.design.composite;
public class Triangle implements Shape {
@Override
public void draw(String fillColor) {
System.out.println("Drawing Triangle with color "+fillColor);
}
}
Cercle.java
package com.journaldev.design.composite;
public class Circle implements Shape {
@Override
public void draw(String fillColor) {
System.out.println("Drawing Circle with color "+fillColor);
}
}
Objet composite
A composite object contains group of leaf objects and we should provide some helper methods to add or delete leafs from the group. We can also provide a method to remove all the elements from the group. Drawing.java
package com.journaldev.design.composite;
import java.util.ArrayList;
import java.util.List;
public class Drawing implements Shape{
//collection de formes
private List shapes = new ArrayList();
@Override
public void draw(String fillColor) {
for(Shape sh : shapes)
{
sh.draw(fillColor);
}
}
//ajout de forme au dessin
public void add(Shape s){
this.shapes.add(s);
}
//suppression de forme du dessin
public void remove(Shape s){
shapes.remove(s);
}
//suppression de toutes les formes
public void clear(){
System.out.println("Clearing all the shapes from drawing");
this.shapes.clear();
}
}
Remarquez que le composite implémente également le composant et se comporte de manière similaire à la feuille, à l’exception qu’il peut contenir un groupe d’éléments feuilles. Notre implémentation du modèle composite est prête, et nous pouvons la tester avec un programme client.
Programme client du modèle de conception composite
TestCompositePattern.java
package com.journaldev.design.test;
import com.journaldev.design.composite.Circle;
import com.journaldev.design.composite.Drawing;
import com.journaldev.design.composite.Shape;
import com.journaldev.design.composite.Triangle;
public class TestCompositePattern {
public static void main(String[] args) {
Shape tri = new Triangle();
Shape tri1 = new Triangle();
Shape cir = new Circle();
Drawing drawing = new Drawing();
drawing.add(tri1);
drawing.add(tri1);
drawing.add(cir);
drawing.draw("Red");
drawing.clear();
drawing.add(tri);
drawing.add(cir);
drawing.draw("Green");
}
}
La sortie du programme client du modèle composite est :
Drawing Triangle with color Red
Drawing Triangle with color Red
Drawing Circle with color Red
Clearing all the shapes from drawing
Drawing Triangle with color Green
Drawing Circle with color Green
Points importants du modèle composite
- Le modèle composite doit être appliqué uniquement lorsque le groupe d’objets doit se comporter comme un seul objet.
- Le modèle de conception composite peut être utilisé pour créer une structure arborescente. `
« java.awt.Container#add(Component)` est un excellent exemple du modèle composite en Java et est beaucoup utilisé dans Swing. Articles précédents sur les motifs de conception structurels : `
Source:
https://www.digitalocean.com/community/tutorials/composite-design-pattern-in-java