static bool TestDecoratorPattern() { Console.WriteLine("TESTING THE DECORATOR DESIGN PATTERN: "); ConcreteComponent comp = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(comp); ConcreteDecoratorB d2 = new ConcreteDecoratorB(d1); comp.Operation(); //Output: //Operation from ConcreteComponent d1.Operation(); //Output: //Operation from ConcreteComponent //(AddedBehaviour A) + Operation from ConcreteDecoratorA d2.Operation(); //Output: //Operation from ConcreteComponent //(AddedBehaviour A) + Operation from ConcreteDecoratorA //(AddedBehaviour B) + Operation from ConcreteDecoratorB return(true); }
public static void Test() { var concreteComponent = new ConcreteComponent("concrete property", "component property"); concreteComponent.Operation(); var concreteDecorator = new ConcreteDecorator(concreteComponent); concreteDecorator.AnotherOperation(); }
static void Main(string[] args) { // Decorators Component simple = new ConcreteComponent(); DecoratorAlpha decoratorAlpha = new DecoratorAlpha(simple); DecoratorBeta decoratorBeta = new DecoratorBeta(decoratorAlpha); Console.WriteLine(simple.Operation()); Console.WriteLine(decoratorAlpha.Operation()); Console.Write(decoratorBeta.Operation()); }
public static void TestDecorator() { IComponent component = new ConcreteComponent(); Console.WriteLine(component.Operation()); Decorator decorator = new ConcreteDecoratorA(component); Console.WriteLine(decorator.Operation()); decorator = new ConcreteDecoratorB(decorator); Console.WriteLine(decorator.Operation()); }
/// <summary> /// Execute decorator design pattern example /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Decorator_OnClick(object sender, RoutedEventArgs e) { var simpleComponent = new ConcreteComponent(); DesignPatternsLog.Text += $"Decorator@ I get a simple component: {simpleComponent.Operation()}"; DesignPatternsLog.Text += $"{Environment.NewLine}"; // Note how decorators can wrap not only simple components // but the other decorators as well. var decoratorA = new ConcreteDecoratorA(simpleComponent); var decoratorB = new ConcreteDecoratorB(decoratorA); DesignPatternsLog.Text += $"Decorator@ Now I've got a decorated component: {decoratorB.Operation()}"; DesignPatternsLog.Text += $"{Environment.NewLine}"; }
public static void Main() { ConcreteComponent cc = new ConcreteComponent(); cc.Operation(); Console.WriteLine(); ConcreteDecoratorA cd1 = new ConcreteDecoratorA(cc); cd1.Operation(); Console.WriteLine(); ConcreteDecoratorB cd2 = new ConcreteDecoratorB(cd1); cd2.Operation(); Console.WriteLine(); Console.ReadKey(); }