Design Patterns: Elements Of Reusable Object Oriented Software - Gamma (Erich)
25