We ended the last section with the notion that the decorator pattern has particular advantages that come from preserving the decorated interface, and that these advantages can sometimes turn into limitations. The Adapter pattern is a more general pattern that can be used in such cases.
The Adapter pattern is defined very generally—it is a structural pattern that allows an interface of a class to be used as another, different interface. It allows an existing class to be used in code that expects a different interface, without modifying the original class. Such adapters are sometimes called class wrappers, since they wrap around a class and present a different interface. You may recall that decorators are also sometimes called class wrappers, much for the same reason.
However, Adapter is a very general, broad pattern. It can be used to implement several...