Design patterns Elemets of reusable object - oriented software - Gamma, Erich; Helm, Richard; Johnson, Ralph; Viissides, John (Addison - Wesley, 1995)