Aller au contenu principal

Decorator (ou Décorateur en français)

Le design pattern Décorateur (ou Decorator en anglais) est un patron de conception structurel. Il permet d’ajouter dynamiquement des comportements à un objet, sans modifier sa classe ni toucher à son code source.

🎯 À quoi ça sert ?

  • À éviter les sous-classes en cascade quand on veut combiner plusieurs comportements.
  • À ajouter des fonctionnalités au moment de l’exécution, pas à la compilation.
  • À respecter le principe de responsabilité unique : chaque classe fait une seule chose.

👨‍💻 Implémentation (Exemple)

Composant de base

from abc import ABC, abstractmethod

class Message(ABC):
@abstractmethod
def render(self) -> str:
pass

Implémentation concrète

class TextMessage(Message):
def __init__(self, content: str):
self.content = content

def render(self) -> str:
return self.content

Décorateurs

class MessageDecorator(Message):
def __init__(self, wrapped: Message):
self.wrapped = wrapped

def render(self) -> str:
return self.wrapped.render()

class EncryptedMessage(MessageDecorator):
def render(self) -> str:
original = self.wrapped.render()
return f"[Encrypted]({original[::-1]})"

class HTMLMessage(MessageDecorator):
def render(self) -> str:
original = self.wrapped.render()
return f"<p>{original}</p>"

Diagramme UML

decorator