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