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