12 - seeren-training/Design-Pattern GitHub Wiki

Decorator

  • 🔖 Définition
  • 🔖 Implémentation

📑 Définition

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.

image


📑 Implémentation

Sujet

interface Displayable
{
	public function display();
}

class Message implements Displayable
{

  private string $message;

  public function __construct(string $message)
  {
    $this->message = $message;
  }

  public function display(): void
  {
    echo $this->message;
  }

}

Decorateur

abstract class MessageDecorator implements Displayable
{
	
  protected Displayable $message;

  protected function __construct(Displayable $message)
  {
    $this->message = $message;
  }

}

class BoldMessage extends MessageDecorator
{

  public function display(): void
  {
    echo '<strong>';
    $this->message->display();
    echo '</strong>';
  }

}

Utilisation

$message = new BoldMessage(new Message("Hello World"));
$message->display();
⚠️ **GitHub.com Fallback** ⚠️