Aller au contenu

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");
}
}

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.