Design patterns : elements of reusable object-oriented software / Erich Gamma ... [et al.]. - Gamma, Erich (Addison-Wesley professional computing series, 1995)