Design Patterns: Elements of Reusable Object-Oriented Software Note of Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four).