DESIGN PATTERNS: ELEMENTS OF REUSABLE OBJECT-ORIENTED SOFTWARE - GAMMA, ERICH (NEW DELHI PEARSON EDUCATION, 2006)