Chapter 2. Patterns
Developers don’t ever develop from scratch. Many problems recur in various guises throughout development. Mature engineering disciplines capitalize on the repetitive nature of development by collecting handbooks of adequate solutions to recurring problems. A bridge designer designs using the solutions in the handbook, like I-beams, not the laws of physics.
Interest in software reuse reveals a recognition that software engineering is just as repetitious as other engineering disciplines. If leveraging the commonality in software development is the problem, though, large scale code reuse has not proven to be the answer.
Patterns form a more flexible basis for producing systematic variations on the common themes of software engineering. ...