Now that we've seen the structure of a typical design pattern, let's take a moment to consider the types of patterns that are available. Patterns are usually grouped into one of the following three categories, which are the most important ones:
Creational patterns: These focus on how we can create objects or classes. Even though this might sound simple (and in some aspects, like common sense), they can be really effective in large applications that need to control the object creation process. Examples of creational patterns include Abstract, Singleton, or Builder.
Structural design patterns: These focus on ways to manage relationships between objects so that your application is architected in a scalable way. A key aspect of structural patterns is to ensure that a change in one part of your application does not affect all the other parts. This group covers patterns such as Proxy, Adapter, or Façade.
Behavioral patterns: These focus on communication between objects and...