Skip to content

Latest commit

 

History

History
67 lines (45 loc) · 1.64 KB

5.decorator.md

File metadata and controls

67 lines (45 loc) · 1.64 KB

Decorateur

Problème :

  • On souhaite pouvoir ajouter dynamiquement de nouvelles responsabilités à une classe existante sans modifier son interface.
  • L’utilisation de l’héritage pour étendre des objets n’est pas pratique, ce qui peut arriver quand leur hiérarchie est déjà complexe.
  • ajouter dynamiquement des fonctionnalités supplémentaires à un objet sans modifier sa structure ou son interface
  • alternative souple à l'héritage pour composer de nouvelles fonctionnalités.

Pattern Decorator - Trashtoy — Travail personnel

On représente des personnages dans un jeu. Ces personnages ont un poids qui est utilisé par le moteur physique.

interface Personnage {
    public double getWeight() ;
}


/*
* classe concrète Humain
*/
class Humain implements Personnage {
    public double getWeight(){
        return 80.0 ;
    }
}



// decorator
class PersonnageAvecHache implements Personnage {

   private Personnage original ;

   public PersonnageAvecHache(Personnage original){
        this.original = original ;
    }



   public double getWeight(){
        return original.getWeight() + 15.0 ;
    }
}


// autre decorator
class PersonnageAvecChapeau implements Personnage {

   private Personnage original ;

   public PersonnageAvecChapeau(Personnage original){
        this.original = original ;
    }

   public double getWeight(){
        return original.getWeight() + 2.0 ;
    }
}


Personnage personnage = new Humain();
personnage = new PersonnageAvecHache(personnage);
personnage = new PersonnageAvecChapeau(personnage);
System.out.println(personnage.getWeight()); // 80 + 15 + 2