67 lines
1.5 KiB
C#
67 lines
1.5 KiB
C#
#region
|
|
|
|
using System;
|
|
using ShapeDecorations.Shapes;
|
|
using ShapeDecorations.Shapes.Decorators;
|
|
|
|
#endregion
|
|
|
|
namespace ShapeDecorations;
|
|
|
|
internal class Program
|
|
{
|
|
private static void Main(string[] args)
|
|
{
|
|
// scoped to allow for re-use of variable names
|
|
{
|
|
// First create a concrete shape, since we need one to be able to decorate anything
|
|
var circle = new Circle();
|
|
circle.Draw();
|
|
|
|
Console.WriteLine();
|
|
|
|
// Now we decorate the shape with a red color
|
|
var red = new RedColor(circle);
|
|
red.Draw();
|
|
|
|
Console.WriteLine();
|
|
|
|
// Since the decorator itself is an IShape, we can further decorate it
|
|
var blueBorder = new BlueBorder(red);
|
|
blueBorder.Draw();
|
|
|
|
Console.WriteLine();
|
|
|
|
// And can continue to decorate each ShapeDecorator with as many decorator classes as we like
|
|
var huge = new HugeSize(blueBorder);
|
|
huge.Draw();
|
|
|
|
Console.WriteLine();
|
|
}
|
|
|
|
{
|
|
// Always must start with a concrete IShape implementation
|
|
var rect = new Rectangle();
|
|
rect.Draw();
|
|
|
|
Console.WriteLine();
|
|
|
|
// Note that the order in which we decorate doesn't matter
|
|
var blueBorder = new BlueBorder(rect);
|
|
blueBorder.Draw();
|
|
|
|
Console.WriteLine();
|
|
|
|
var huge = new HugeSize(blueBorder);
|
|
huge.Draw();
|
|
|
|
Console.WriteLine();
|
|
|
|
var red = new RedColor(huge);
|
|
red.Draw();
|
|
|
|
Console.WriteLine();
|
|
}
|
|
}
|
|
}
|