mercredi 29 août 2012

Design Pattern Composite : exemple Java

Voila un exemple simple en Java pour illustrer le pattern composite.

Diagramme UML


Les sources

La classe Forme
import java.awt.geom.Point2D;

abstract class Forme {

   Point2D position;

   void ajouterForme(Forme forme) throws Exception {
      throw new Exception("Non impémenté");
    }
   void retirerForme(Forme forme) throws Exception {
      throw new Exception("Non impémenté");
   }

   abstract void dessiner();

   abstract float calculerVolume();
}

La classe Carre
import java.awt.geom.Point2D;

class Carre extends Forme {

int hauteur;

   int largeur;

   public Carre(Point2D position, int hauteur, int largeur) {
      this.position = position;
      this.hauteur = hauteur;
      this.largeur = largeur;
   }

   @Override
   public void dessiner() {
      ...
   }

   @Override
   public float calculerVolume() {
      return hauteur * largeur;
   }
}

La classe Cercle
class Cercle extends Forme {

   int rayon;

   public Cercle(int rayon) {
      this.rayon = rayon;
   }

   @Override
   public void dessiner() {
      ...
   }
   @Override
   public float calculerVolume() {
      return (float)Math.PI * rayon * rayon;
   }
}

La classe Groupe
import java.util.HashSet;
import java.util.Set;

class Groupe extends Forme {

   private Set<forme> formes;

   public Groupe() {
      this.formes = new HashSet<forme>();
   }

   @Override
   public void ajouterForme(Forme forme) {
      formes.add(forme);
   }

   @Override
   public void retirerForme(Forme forme) {
      formes.remove(forme);
   }

   @Override
   public void dessiner() {
      for (Forme forme : formes) {
         forme.dessiner();
      }
   }
   @Override
   public float calculerVolume() {
      float volume = 0;
      for (Forme forme : formes) {
         volume += forme.calculerVolume();
      }
      return volume;
   }
}

1 commentaire :