using System.Collections.Generic;
public static void Main()
ConcreteComponent component = new ConcreteComponent();
ConcreteDecorator decorator = new ConcreteDecorator(new ConcreteComponent());
decorator.DoSomethingElse();
class ConcreteComponent : IComponent
public void DoSomething()
Console.WriteLine("Doing something!");
abstract class Decorator : IComponent
protected IComponent Component { get; set; }
public Decorator(IComponent component)
this.Component = component;
public void DoSomething()
this.Component.DoSomething();
class ConcreteDecorator : Decorator
public ConcreteDecorator(IComponent component) : base(component) {}
public void DoSomethingElse()
Console.WriteLine("Doing something else!");