public class ProduitComposite implements Produit {
private ArrayList<Produit> enfants = new ArrayList<Produit>(); public void ajouter(Produit produit) { enfants.add(produit); // Ajoute un produit à la liste des enfants } public void remove(Produit produit) { if (enfants.contains(produit)) { enfants.remove(produit); // Supprime un produit de la liste des enfants s'il est présent } } public Iterator<Produit> getChildren() { assert null != enfants; return enfants.iterator(); // Renvoie un itérateur sur la liste des produits } public String getDescriptif() { StringBuffer result = new StringBuffer(); result.append("Description Composite"); result.append(" : ("); for (Produit produit : enfants) { result.append(produit.getDescriptif()); if (this.getChildren().hasNext()) { result.append(", ");} } result.append(" )"); return result.toString(); // Renvoie le descriptif du produit composite et de ses enfants } public float getPrix() { float result = 0; for (Produit produit : enfants) { result += produit.getPrix(); // Calcule la somme des prix des enfants } result = result * 0.9f; // Applique une réduction de 10% au prix total return result; // Renvoie le prix réduit } } interface Produit { public float getPrix(); public String getDescriptif(); } class Barre implements Produit { public void setPrix(float prix) { this.prix = prix; } public void setDescriptif(String descriptif) { this.descriptif = descriptif; } private float prix = 0; private String descriptif; private float longueur; public Barre() {} public String getDescriptif() { return descriptif; } public float getPrix() { return prix; } public float getLongueur() { return this.longueur; } public void setLongueur(float longueur) { this.longueur = longueur; } } class Poids implements Produit { public void setPoids(float poids) { this.poids = poids; } public void setPrix(float prix) { this.prix = prix; } public void setDescriptif(String descriptif) { this.descriptif = descriptif; } private float poids = 0; private float prix = 0; private String descriptif; public Poids() { } public float getPoids() { return poids; } public String getDescriptif() { return descriptif; } public float getPrix() { return prix; } } class Program { public static void main(String[] args) { Barre maBarre = new Barre(); maBarre.setPrix(25f); maBarre.setDescriptif("Barre d'haltérophilie"); maBarre.setLongueur(150f); Poids leger = new Poids(); leger.setPrix(15f); leger.setDescriptif("Poids d'haltère"); leger.setPoids(0.5f); Poids moyen = new Poids(); moyen.setPrix(17f); moyen.setDescriptif("Poids d'haltère"); moyen.setPoids(1f); Poids lourd = new Poids(); lourd.setPrix(19f); lourd.setDescriptif("Poids d'haltère"); lourd.setPoids(1.5f); ProduitComposite haltere = new ProduitComposite(); haltere.ajouter(maBarre); haltere.ajouter(leger); haltere.ajouter(moyen); haltere.ajouter(lourd); System.out.println(haltere.getDescriptif()); } }