Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
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 :
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