One reason the object-oriented programming community embraced patterns so emphatically is because patterns describe relationships. The base element of object-oriented programming is a class. However, a single class is not very meaningful apart from its relationship to other classes that make up the solution. Each pattern typically describes a cluster of classes, highlighting the relationships and interactions between them. Thus, patterns turn the sea of classes into a much more manageable collection of patterns.
Now that the number of available patterns easily exceeds the number of classes in an average application, you may suddenly find yourself in a sea of patterns. How can you make sense out of all these patterns? Again, the relationships between items appear to be the key. It is easy to see that some patterns are closely related to other patterns. For example, some patterns are refinements of others. Three-Tiered Distribution is a specific application of the concept of Tiered Distribution. Observer is frequently used to implement a part of the Model-View-Controller pattern. Page Controller describes the controller portion of Model-View-Controller in more detail. Implementing Page Controller in ASP.NET is an implementation of the Page Controller pattern using Microsoft ASP.NET.
To begin organizing patterns according to relationship, visualize a set of patterns as small circles (see Figure 2.1):
Figure 2.1: A set of patterns
If you draw a line between each pair of patterns that share some relationship, you get a picture like this:
Figure 2.2: Pattern relationships represented as lines
The somewhat random collection of circles becomes a connected web of patterns. When you look at a pattern, you can now identify closely related patterns and review those as well. You can also identify “neighborhoods” of closely related patterns and see how they are related to other, more remote patterns.