Design Pattern Composite

Team_Jbzz
45.2K views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content

Exemple

Prenons l'exemple d'un camion semi-remorque.

Ce dernier est composé d'un tracteur et d'une remorque, qui ont un poid séparé mais également un poid camion entier. Un tracteur routier doit également pourvoir rouler sans remorque. Nous disposons donc du diagramme suivant :

Image Heritage

Première étape.

Passons à l'implémentation d'un pattern Composite.

Premièrement on crée l'interface qui sera implémentée par toutes les autres classes.

public interface Composant {

    public int getPoids();

}

Deuxiéme étape.

Ensuite on crée les différentes classes que l'on pourra composer.

public class Remorque implements Composant {

	private int poids;
   
    public Remorque(int poids) {
		this.poids = poids;
    }
    
    @Override
    public int getPoids() {
        return this.poids;
    }

}

public class Tracteur implements Composant {

	private int poids;
   
    public Tracteur(int poids) {
		this.poids = poids;
    }
	
	@Override
    public int getPoids() {
        return this.poids;
    }
}

Troisième étape.

Puis, on implémente la classe composite Composite, avec les méthodes add et remove qui permettront d'ajouter ou de supprimer plusieurs éléments à une composition.

public class CamionComposite implements Composant {

	private Collection children;

    public CamionComposite() {
        children = new ArrayList();
    }

  
    public void add(Composant composant){
     
        children.add(composant);
    }

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

    public Iterator getChildren() {
        return children.iterator();
    }
	
	@Override
    public int getPoids() {
        int result = 0;
        for (Iterator i = children.iterator(); i.hasNext(); ) {
            Object objet = i.next();
			
            Composant composant = (Composant)objet;

            result += composant.getPoids();
        }
        return result;
    }
}

Quatrième étape.

Maintenant on implémente le main pour utiliser le Composite

Open Source Your Knowledge: become a Contributor and help others learn. Create New Content