All right so let's try to summarize the things that we've learned about the decorator Design Patterns
so we looked at two variations the dynamic decorator and the static decorator so let's thought with
the dynamic so a dynamic decorator simply keeps the reference to the decorated object so you have the
decorated object being typically passed as a constructor argument and then the decorator kind of keeps
a reference to it that provides some of the API of the decorated object if you implemented the right
interface.
Well it's really up to you.
So you control what kind of functionality the decorator actually provides.
And then there is the more sophisticated approach which is the static decorator which uses mixin inheritance
so effectively you can compose the different decorators using templates.
And this is great because then you don't have to have any sort of common interface this inheritance
kind of does everything for you and you get what you inherit basically.
Now both of these approaches they allow limitless composition of the decorator so you can pile decorators
on top of one another.
For example in the static case you can make a transparent shape of a colored shape of a circle and the
same goes for the dynamic approach as well.