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>"