1.2.2. Adapter Structure
From the book:
In Figure 2, the
Adapter implements the
Target interface and delegates to the class that we want to adapt, in our case
Adaptee. Since our adaptee is an object inside our adapter, we call this an “object adapter”. The object adapter uses composition to adapt the
Figure 2. Structure of the object-adapter design pattern.
An example of an object adapter in Java is the
InputStreamReader, which adapts an
InputStream into a
A lesser used form of adapter occurs when our
Adapter extends the
Adaptee and implements the
Target interface. Since the adaptee is a superclass of our adapter, we call this a “class adapter”, as shown in Figure 3. The class adapter uses inheritance to adapt the
Figure 3. Structure of the class-adapter design pattern.
An advantage of the class adapter is that it makes it easier to modify parts of an adaptee. Unfortunately, the trade-off is that it becomes harder to adapt a hierarchy of objects. In a later chapter, we shall see how to get the extensibility of the class adapter and the flexibility of the object adapter using a dynamic proxy.