Design patterns are usually categorized in three categories:
- Manages construction of objects
- Can be explicit (ex: constructors) or implicit (ex: Dependency Injection, reflection, etc.)
- Single statement vs step-by-step process
- Focuses on relationships between objects. They seek to define structures.
- Focuses on communications between objects.
- Deals with assigning responsibilities, encapsulating behavior, delegation, etc.
A pattern can belong to more than one category. A design pattern usually focuses on one main issue and proposes a solution that offers flexibility (easy to maintain and to improve) and reusability.