Design Pattern Composite

Team_Jbzz
1,167 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

1
2
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// {...}
public class Main
{
public static void main(String[] args)
{
Remorque maRemorque = new Remorque(11);
System.out.println("Le poids de ma remorque est:");
System.out.println(maRemorque.getPoids());
System.out.println("tonnes");
Tracteur monTracteur = new Tracteur(8);
System.out.println("Le poids de mon tracteur est:");
System.out.println(monTracteur.getPoids());
System.out.println("tonnes");
CamionComposite semiRemorque = new CamionComposite();
semiRemorque.add(maRemorque);
semiRemorque.add(monTracteur);
System.out.println("Le poids de mon semi-remorque est:");
System.out.println(semiRemorque.getPoids());
System.out.println("tonnes");
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content