We have studied two of the most commonly used patterns—not just in C++, but in software design in general. The Adapter pattern offers an approach to solving a wide class of design challenges. These challenges have only the most general property in common—given a class, a function, or a software component that provides certain functionality, we must solve a particular problem, and build a solution for a different, related problem. The decorator pattern is, in many ways, a subset of the Adapter pattern, which is restricted to augmenting the existing interface of the class of a function with new behavior.
We have seen that the interface conversion and modification done by the adapters and decorators can be applied to interfaces at every stage of the program's life—while the most common use is to modify runtime interfaces so that a class can be used...