Source: http://www.w3sdesign.com/GoF_Design_Patterns_Reference0100.pdf