Design Patterns Elements of Reusable Object-Oriented Software - Gamma, Helm (India The McGraw-Hill, 2000)