We propose design patterns as a new mechanism for expressing object-oriented design experience.
Design patterns identify, name, and abstract common themes in object-oriented design.
They capture the intent behind a design by identifying objects, their collaborations, and the distribution of responsibilities. Design patterns can be considered reusable micro-architectures that contribute to an overall system architecture. We describe how to express and organize design patterns and introduce a catalog of design patterns. We also describe our experience in applying design patterns to the design of object-oriented systems.