Philosophy, if it cannot answer so many questions as wecould wish, has at least the power of asking questionswhich increase the interest of the world, and show thestrangeness and wonder lying just below the surfaceeven in the commonest things of daily life.
In this chapter we take a simple problem–solution pairing and use gradual and reasoned steps to expand and refine it into a description that more obviously qualifies as a pattern description. En route we examine the different facets that a pattern embodies and that its description should contain. Our incremental approach also illustrates the iterative nature of pattern writing. The use of feedback, reflection, growth, and refinement is a normal part of the pattern-writing process, not simply an artifact of how we have chosen to illustrate the facets that comprise a sound pattern description.
If asked for a one-sentence characterization of what a pattern is, many pattern-aware software developers might respond with something like:
‘A pattern is a solution to a problem that arises within a specific context.’
This seems a fair summary at first glance. It is certainly not a false one, although it may not cover the whole truth. The truth of the summary is supported by looking around at the common patterns in use today: they provide working, concrete, and adaptable solutions to problems that repeatedly arise in certain situations during software development, ...