Our Decorator implementation is unorthodox because we are mixing native C# language features such as constructors while trying to utilize the best parts of the Unity API. By converting decorator classes into configurable ScriptableObject assets, we gain the ability to make our weapon attachments authorable and configurable by non-programmers. And under the hood, our attachment system is constructed on the foundation of a solid design pattern.
Therefore, we endeavored to strike a balance between usability and maintainability. However, as we are going to see in the next section, there are always alternative approaches.
Design patterns are guidelines, not commandments. Therefore, it's OK to experiment with patterns and test out different ways of implementing them. The code example in this chapter is experimental because it's not a traditional implementation of the Decorator pattern. But we encourage you, as the reader, to continue experimenting with...