public static void Main()
Shape circle = new Circle();
ColorDecorater green = new ColorDecorater("Green", circle);
ShadeDecorater dash = new ShadeDecorater("Dash", green);
Console.WriteLine(dash.Draw());
public abstract class Shape{
public abstract string Draw();
public class Circle : Shape {
public override string Draw(){
public abstract class ShapeDecrotar : Shape {
public Shape shape {set; get;}
public ShapeDecrotar(Shape shape){
public class ColorDecorater: ShapeDecrotar{
public ColorDecorater(string color, Shape shape): base(shape) {
public override string Draw(){
return color + " " + shape.Draw();
public class ShadeDecorater: ShapeDecrotar{
public ShadeDecorater(string shade, Shape shape): base(shape) {
public override string Draw(){
return shade + " " + shape.Draw();