Design patterns CD elements of reusable object-oriented software - Gamma, Erich (Addison-Wesley Professional Computing Series, 1995)