Modèle de conception composite en Java

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.

  1. 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.
  2. 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.
  3. 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