The following table relates design patterns to relative essence. Column 'GoF' refers to the page in the Gang of Four's "Design Patterns" book describing this pattern. Column 'Kind' represents the kind of pattern based on the GoF book. Column 'Essence' describes the correlation of the pattern with relative essence: "+" (presence of pattern increases relative essence), "0" (no direct relationship between pattern and relative essence), and "-" (presence of pattern decreases relative essence).
GoF | Kind | Design Pattern | Essence | Comment | ||
---|---|---|---|---|---|---|
page 87 | Creational | Abstract Factory | - | introduces a factory method (in addition to the necessary constructor) | ||
page 97 | Creational | Builder | - | decouples construction by going via builder's methods | ||
page 107 | Creational | Factory Method | - | introduces a factory method (in addition to the necessary constructor) | ||
page 117 | Creational | Prototype | - | introduces a clone method (in addition to the necessary constructor) | ||
page 127 | Creational | Singleton | - | introduces a method (in addition to the necessary constructor) | ||
page 139 | Structural | Adapter | - | introduces delegation methods | ||
page 151 | Structural | Bridge | - | decouples "interface" methods from "implementation" methods, causing extra indirection | ||
page 163 | Structural | Composite | 0 | this is more about using polymorphism to treat atomic and composite objects the same, not necessarily about introducing or eliminating indirection | ||
page 175 | Structural | Decorator | - | replaces inheritance with delegation | ||
page 185 | Structural | Facade | - | introduces indirection via facade's methods | ||
page 195 | Structural | Flyweight | 0 | this is more about reducing the number of instances and about introducing extra parameters to pass in extrinsic state than about introducing or eliminating indirection | ||
page 207 | Structural | Proxy | - | introduces indirection via proxy's methods | ||
page 223 | Behavioral | Chain of Responsibility | (-) | 0 | may introduce an extra level of indirection, e.g. by calling a method invoking the next handler in a chain; however, this pattern seems to be more about replacing iteration with recursion than introducing or eliminating indirection | |
page 233 | Behavioral | Command | - | create a class to represent a method, may directly introduce indirection (command's execute method calls original method), also adds constructor and possibly accessors | ||
page 243 | Behavioral | Interpreter | - | create a separate class for each language rule, may directly introduce indirection (separating monolithic interpret method into many interpret methods), also adds a constructors and possibly accessors | ||
page 257 | Behavioral | Iterator | - | decouples algorithm from collection, adding next and hasNext methods | ||
page 273 | Behavioral | Mediator | - | introduces indirection via mediator | ||
page 283 | Behavioral | Memento | (-) | (0) | this is more about an extra feature (being able to externalize state), not necessarily about introducing or eliminating indirection | |
page 293 | Behavioral | Observer | - | introduces indirection through extra notify methods | ||
page 305 | Behavioral | State | - | introduces delegation to state | ||
page 315 | Behavioral | Strategy | - | introduces delegation to strategy | ||
page 325 | Behavioral | Template Method | - | breaks algorithm into smaller steps that can be factored out into template methods | ||
page 331 | Behavioral | Visitor | - | double dispatch requires two methods (visit and accept) |
Of the 23 GoF design patterns, none of them should imply a higher relative essence. Only 4 patterns are mostly uncorrelated with relative essence. The vast majority (19) represent a design with a low relative essence.