Software typically outlives hardware, so over the course of a program’s life it may be used on a tremendous range of target platforms. The goal is to obtain a design that works well on the original target platform, but at the same time is flexible enough to adapt to different classes of hardware.
—Tim Mattson, et. al.
Design patterns (refer to Chapter 11) were introduced in the 1990s in order to “describe simple and elegant solutions to specific problems in object-oriented software design. Design patterns capture solutions that have developed and evolved ...