Fresco is any of several related mural painting types, done on plaster on walls or ceilings. The word fresco comes from the Italian word affresco [afˈfresːko], which derives from the Latin word for fresh. Frescoes were often made during the Renaissance and other early time periods. Buon fresco technique consists of painting in pigment mixed with water on a thin layer of wet, fresh lime mortar or plaster, for which the Italian word for plaster, intonaco, is used. A secco painting, in contrast, is done on dry plaster (secco is "dry" in Italian). The pigments require a binding medium, such as egg (tempera), glue or oil to attach the pigment to the wall.
In this snippet we have a class hierarchy with a SimpleMessage at the top. The SimpleMessage class has a constructor that accepts a content string as well as two methods: GetMessage; and, PrintMessage. Down the hierarchy we have three subclasses: ExcitedMessage; QuizzicalMessage; and, ExcitedAndQuizzicalMessage. The only difference in the subclasses is that they override the SimpleMessage constructor to change the content string and append various exclamations. When we instantiate various message objects, using the same content string, and iterate over them, each has their own unique output.
When we instantiate a SimpleMessage and then pass it to the various decorators, we now get new behavior. Moreover, since both the concrete component and the concrete decorators all implement / descend from IMessage, they are interchangeable as far as the program is concerned, meaning that we can loop over them together. Further, rather than having to create a new ExcitedAndQuizzicalMessageDecorator class, we were able to achieve the same effect by double wrapping a SimpleMessage object (first in an ExcitedMessageDecorator and then in a QuizzicalMessageDecorator). Finally, note that despite having been passed into various decorators, our simpleMsg object remains unchanged at the end of the program.