One of the premises of the Examples Stage, and indeed, of all of Agile, is that good code is the result not of any up-front design process, but is instead the fruit on an inductive, iterative, incremental stepwise process that exploits experience and hindsight. Software fitted to its requirements is one result of such a process. Mature abstractions, and yes, even patterns, are another. Patterns, are after all, distillations of commonalities drawn from the designs of real code.
But, do we really think in terms of abstractions when we think about patterns either? Or do we think in terms of stereotypical examples, and look for design problems that resemble these?
We beleive that, instead, when we think of a particular Design Pattern, we often think of a particular, poster child example of that pattern, and generalize from that. I do, anyway. This tutorial will explore a number of familiar, and a few not so familiar, design patterns through the lens of these Poster Child Examples. Familiarity with concrete settings where a particular pattern excels sets the stage for the recognition of opportinites to apply that pattern in our own code, no matter when in the lifecycle that opportunity arises.
We’ve been cultivating a substantial stable of these examples as part of our “Greatest Hits” development effort, and will cherry pick some of our favorites for this tutorial.