Erich Gamma

Design Patterns: Elements of Reusable Object-Oriented Software - 1st - New Delhi Pearson 1994