# Yoda and the Decorator Pattern: A Lesson for Luke

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104419064/48cacb2b-8dd2-43a7-88b8-3f6a41efcb59.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104458330/b0eef3c3-636b-43e9-9991-f874d6ee0439.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104493974/2348b5e1-0032-4043-932d-e6b2b1ddc4f3.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104515699/ce6dd6b8-d84c-4bb9-b7c1-5be9c22f11a9.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104556829/8eebb8d7-d8f6-4d31-93f4-a8eb7070ab67.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104627331/e4acc9df-b04b-446c-87de-3957610061a0.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673156908233/2bf29cea-ae7e-4b80-9860-42241a7ebc20.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673156952581/22350a1d-d3e0-472d-a38e-bb4edaa5e2dd.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104683754/44b63b0b-6411-493a-adb2-558d0aff20bb.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673104701540/13256a2d-7f8e-498b-9c6b-eb81c8b1e734.png align="center")

```csharp
// Base class
public abstract class Lightsaber
{
    public abstract void Assemble();
}

// Concrete implementation of the base class
public class StandardLightsaber : Lightsaber
{
    public override void Assemble()
    {
        Console.WriteLine("Assembling standard lightsaber");
    }
}

// Decorator class
public class HiltDesignDecorator : Lightsaber
{
    private Lightsaber _lightsaber;
    private string _hiltDesign;

    public HiltDesignDecorator(Lightsaber lightsaber, string hiltDesign)
    {
        _lightsaber = lightsaber;
        _hiltDesign = hiltDesign;
    }

    public override void Assemble()
    {
        _lightsaber.Assemble();
        Console.WriteLine($"Adding {_hiltDesign} hilt design to lightsaber");
    }
}

// Decorator class
public class BladeColorDecorator : Lightsaber
{
    private Lightsaber _lightsaber;
    private string _bladeColor;

    public BladeColorDecorator(Lightsaber lightsaber, string bladeColor)
    {
        _lightsaber = lightsaber;
        _bladeColor = bladeColor;
    }

    public override void Assemble()
    {
        _lightsaber.Assemble();
        Console.WriteLine($"Adding {_bladeColor} blade color to lightsaber");
    }
}
```

Then, you can use the decorator classes to create customized lightsabers:

```csharp
Lightsaber lightsaber = new HiltDesignDecorator(new BladeColorDecorator(new StandardLightsaber(), "green"), "gold");
lightsaber.Assemble();
```

This would output:

```csharp
Assembling standard lightsaber
Adding green blade color to lightsaber
Adding gold hilt design to lightsaber
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673105077887/e65e8dc7-8537-4b64-8ddc-845d83f55d96.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1673105118594/f8eae35f-4219-4556-b240-3c9b5beeb7f8.png align="center")


If you liked my content, do kindly like and share in your network. And don't forget to subscribe to the newsletter to NEVER miss an article. Please follow [<mark>me on twitter</mark>](https://twitter.com/zahiruddin_t).
