Design Patterns: Elements of Reusable Object-Oriented Software Introduction A Case Study: Designing a Document Editor Creational Patterns Structural Patterns Behavioral Patterns