Design Patterns: Elements of Reusable Object Oriented Software - Gamma (Erich)
20