Design patterns are represented as relationships between classes and objects with defined responsibilities that act in concert to carry out the solution. To illustrate a design pattern, consider the Adapter pattern, one of the original 23 patterns described in Design Patterns. Adapter provides a solution to the scenario in which a client and server need to interact with one another, but cannot because their interfaces are incompatible. To implement an Adapter, you create a custom class that honors the interface provided by the server and defines the server operations in terms the client expects. This is a much better solution than altering the client to match the interface of the server
Structure of a Design Pattern
Design pattern documentation is highly structured. The patterns are documented from a template that identifies the information needed to understand the software problem and the solution in terms of the relationships between the classes and objects necessary to implement the solution. There is no uniform agreement within the design pattern community on how to describe a pattern template. Different authors prefer different styles for their pattern templates. Some authors prefer to be more expressive and less structured, while others prefer their pattern templates to be more precise and high grain in structure.
- Pattern Name Describes the essence of the pattern in a short, but expressive, name
- Intent Describes what the pattern does
- Motivation Provides an example of a problem and how the pattern solves that problem
- Applicability Lists the situations where the pattern is applicable
- Structure Set of diagrams of the classes and objects that depict the pattern
- Participants Describes the classes and objects that participate in the design pattern and their responsibilities
- Collaborations Describes how the participants collaborate to carry out their responsibilities
- Consequences Describes the forces that exist with the pattern and the benefits, trade-offs, and the variable that is isolated by the pattern
Benefits of Design Patterns
Design patterns have two major benefits. First, they provide you with a way to solve issues related to software development using a proven solution. The solution facilitates the development of highly cohesive modules with minimal coupling. They isolate the variability that may exist in the system requirements, making the overall system easier to understand and maintain. Second, design patterns make communication between designers more efficient. Software professionals can immediately picture the high-level design in their heads when they refer the name of the pattern used to solve a particular issue when discussing system design.