Decorator
Contexte : Attacher dynamiquement des responsabilités supplémentaires à un objet. Les décorateurs offrent une alternative flexible à l’héritage pour étendre les fonctionnalités.
public interface IComponent{ void Operation();}
public class ConcreteComponent : IComponent{ public void Operation() => Console.WriteLine("Component operation");}
public abstract class Decorator : IComponent{ protected IComponent _component; public Decorator(IComponent component) => _component = component; public virtual void Operation() => _component.Operation();}
public class ConcreteDecoratorA : Decorator{ public ConcreteDecoratorA(IComponent c) : base(c) { } public override void Operation() { base.Operation(); Console.WriteLine("Added behavior A"); }}Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »Flux dans .NET : FileStream peut être décoré avec BufferedStream, CryptoStream, GZipStream pour ajouter des fonctionnalités de mise en mémoire tampon, chiffrement ou compression sans modifier le flux original.
Exemple : Le middleware ASP.NET Core est un pipeline de décorateurs : chaque middleware décore le suivant, ajoutant journalisation, authentification, mise en cache, etc. Les décorateurs de System.IO.Stream incluent GZipStream, CryptoStream.