Design Patterns: Elements of Reusable Object-Oriented Software

    Design Patterns: Elements of Reusable Object-Oriented Software