using System; interface Action { string DoIt(); } class Component : Action { public string DoIt() { return "Component"; } } class DecoratorA : Action { Action component; public DecoratorA(Action c) { component = c; } public string DoIt() { string s = component.DoIt(); s += " DecoratorA "; return s; } } class DecoratorB : Action { Action component; public DecoratorB(Action c) { component = c; } public string DoIt() { string s = component.DoIt(); s += " DecoratorB "; return s; } } class MainClass { static void Main() { Action component = new Component(); Console.WriteLine(new DecoratorA(component).DoIt()); Console.WriteLine(new DecoratorB(component).DoIt()); Console.WriteLine(new DecoratorB(new DecoratorA(component)).DoIt()); DecoratorB b = new DecoratorB(new Component()); Console.WriteLine(new DecoratorA(b).DoIt()); } }