How to Select a Design Pattern
With more than twenty design patterns in the catalog to choose from, it might
be hard to find the one that addresses a particular design problem, especially if
the catalog is new and unfamiliar to you. Here are several different approaches to
finding the design pattern that's right for your problem:
Consider how design patterns solve design problems. Section 1.6 discusses how
design patterns help you find appropriate objects, determine object granularity,
specify object interfaces, and several other ways in which design patterns solve
design problems. Referring to these discussions can help guide your search for the
right pattern.
Scan Intent sections. Section 1.4 lists the Intent sections from all the patterns
in the catalog. Read through each pattern's intent to find one or more that sound
relevant to your problem. You can use the classification scheme presented in Table
1.1 to narrow your search.
Study how patterns interrelate. Figure 1.1 shows relationships between design
patterns graphically. Studying these relationships can help direct you to right pattern
or group of patterns.
Study patterns of like purpose. The catalog has three chapters, one for creational
patterns, another for structural patterns, and a third for behavioral patterns. Each
chapter starts off with introductory comments on the patterns and concludes with
a section that compares and contrasts them. These sections give you insight into
the similarities and differences between patterns of like purpose.
Examine a cause of redesign. Look at the causes of redesign starting to see if
your problem involves one or more of them. Then look at the patterns that help you
avoid the causes of redesign.
Consider what should be variable in your design. This approach is the opposite
of focusing on the causes of redesign. Instead of considering what might force a
change to a design, consider what you want to be able to change without redesign.
The focus here is on encapsulating the concept that varies, a theme of many design
patterns. Table 1.2 (below) lists the design aspect(s) that design patterns let you
vary independently, thereby letting you change them without redesign.
Table 1.2: Design aspects that design patterns let you vary
Purpose |
Design Pattern |
Aspect(s) That Can Vary |
Creational |
Abstract Factory
Builder
Factory Method
Prototype
Singleton |
families of product objects
how a composite object gets created
subclass of object that is instantiated
class of object that is instantiated
the sole instance of a class |
|
Structural |
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy |
interface to an object
implementation of an object
structure and composition of an object
responsibilities of an object without subclassing
interface to a subsystem
storage costs of objects
how an object is accesed; its location |
|
Behavioral |
Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor |
object that can fulfill a request
when and how a request is fulfilled
grammar and interpretation of a language
how an aggregate's elements are accessed, traversed
how and which objects interact with each other
what private information is stored outside an object,
and when
number of objects that depend on another object; how
the dependent objects stay up to date
states of an object
an algorithm
steps of an algorithm
operations that can be applied to object(s) without
changing their class(es) |
Next: How to Use A Design Pattern | Previous: Frameworks
|