Design Patterns : Elements of Reusable Object Oriented Sofware - GAMMA, Erich (Addison Wesley, 1995)