design patterns Elements of reusable object-oriented software - Gamma, Erich; Helm, Richard; Johnson, Ralph & Vlissides, John (Pearson education pte. ltd., Singapore, 1995)