- Décorateur (patron de conception)
-
Pour les articles homonymes, voir Décorateur.
En génie logiciel, un décorateur est le nom d'une des structures de patron de conception.
Un décorateur permet d'attacher dynamiquement de nouvelles responsabilités à un objet. Les décorateurs offrent une alternative assez souple à l'héritage pour composer de nouvelles fonctionnalités.
Sommaire
Exemple en C#
Ici l'héritage est utilisé.
//______________________________________________________________________ // Déclarations abstract class Voiture { public abstract double Prix { get; } } class AstonMartin : Voiture { public override double Prix { get { return 999.99; } } } //______________________________________________________________________ // Décorateurs class Option : Voiture { protected Voiture _originale; protected double _tarifOption; public Option(Voiture originale, double tarif) { _originale = originale; _tarifOption = tarif; } public override double Prix { get { return _originale.Prix + _tarifOption; } } } class Climatisation : Option { public Climatisation (Voiture originale) : base(originale, 1.0) { } } class Parachute : Option { public Parachute (Voiture originale) : base(originale, 10.0) { } } class Amphibie : Option { public Amphibie (Voiture originale) : base(originale, 100.0) { } } //______________________________________________________________________ // Implémentation class Program { static void Main() { Voiture astonMartin= new AstonMartin(); astonMartin = new Climatisation(astonMartin); astonMartin = new Parachute(astonMartin); astonMartin = new Amphibie(astonMartin); Console.WriteLine(astonMartin.Prix); // affiche 1110.99 } }
Exemple en PHP
<?php // Interface pour rendre un objet affichable interface Affichable { public function affiche(); } // Classe contenant un message affichable class Message implements Affichable { protected $message = ''; public function __construct($message) { $this->message = $message; } public function affiche() { echo $this->message; } } // Une classe abstraite de décoration de message affichable abstract class DecorateurDeMessage implements Affichable { protected $messageDecore = null; public function __construct(Affichable $messageDecore) { $this->messageDecore = $messageDecore; } } // Une classe pour "décorer" un message en gras class MessageEnGras extends DecorateurDeMessage { public function affiche() { echo '<strong>'; $this->messageDecore->affiche(); echo '</strong>'; } } // Une classe pour "décorer" un message en italique class MessageEnItalique extends DecorateurDeMessage { public function affiche() { echo '<em>'; $this->messageDecore->affiche(); echo '</em>'; } } // Création du message $message = new Message('le message'); // On met le message en gras et en italique $messageDecore = new MessageEnItalique( new MessageEnGras( $message ) ); // On affiche le message décoré $messageDecore->affiche(); ?>
Articles connexes
Références externes
- Le patron "décorateur" sur le site developpez.com
- (en) Description par Vince Huston
- (en) Decorator Pattern
- (en) C# Conception par James W. Cooper
- (en) Approche PHP et redecorée
- (en) Approche Delphi
- (en) Article Trois approches java pour "décorer" votre code" par Michael Feldman
- (en) Article "Utiliser le patron "décorateur"" par Budi Kurniawan
Wikimedia Foundation. 2010.