Design patterns are solutions to recurring problems in software engineering. Rather than a comprehensive solution, a design pattern is a description of a problem and a template of how to solve it. This template then becomes usable in many different contexts.
The idea is to study both the problem and the applicable solutions. The motivation is that once you have done this, it is easy to recognize patterns among the product requirements and architecture and bring ruggedized, pre-conceived solutions to the problem. Another key advantage is that once your design is composed of well-known patterns, it is easy to communicate and discuss the design with other colleagues/stakeholders.
Design patterns can be roughly categorized into three areas:
- Creational
- Structural
- Behavioral
We shall look at these patterns in detail in the following sections. However, we will begin...