Yoda and the Decorator Pattern: A Lesson for Luke
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f473dda-fb34-491e-9c7c-87ab9dc36e85_1818x1358.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafdeda50-72a9-4848-af61-95ee7c2d73ef_1810x1359.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21e2e9a4-3374-4d5d-94a7-1430a868227f_1805x1355.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c7bc86e-272c-47e5-b3aa-458225376b88_1809x1361.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4c1c26-c45e-47df-8893-08e0ff95cc0e_1810x1363.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ffb666e-725b-408c-92c9-23d82c5360e5_1808x1364.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abf748d-ac2d-4ce0-bdbb-82fc67e0a8d2_1893x1419.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26db76eb-f70e-434c-ae6c-62c2672c2ff7_1895x1421.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5a0ac0-ca07-46bf-a80e-97710e3dc3f1_1811x1362.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F093c2075-b5d2-49f4-bd59-7d4c1c398f43_1811x1358.png)
// 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:
Lightsaber lightsaber = new HiltDesignDecorator(new BladeColorDecorator(new StandardLightsaber(), "green"), "gold");
lightsaber.Assemble();
This would output:
Assembling standard lightsaber
Adding green blade color to lightsaber
Adding gold hilt design to lightsaber
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc07f45c-8474-48c4-a29e-1567b4660720_1815x1359.png)
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cbe4333-62dd-47be-80d4-88f2e9443eae_1809x1355.png)
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 me on twitter.