Java Reference
In-Depth Information
Description
Sometimes you'd like to use a class in a new framework without recoding it to match the new environment. In
such cases, you can design an
Adaptee
class to act as a translator. This class receives calls from the environment
and modifies the calls to be compatible with the
Adaptee
class.
Typical environments where an Adapter can be useful include applications that support plug-in behavior like
graphics, text, or media editors. Web browsers are another environment where the Adapter can be useful.
Applications involving internationalization (language conversion, for example) might benefit from Adapters, as
well as those that use components (such as JavaBeans™) that are added on the fly.
A real-world example of the Adapter is a foreign language phrase book. The phrase book translates common
expressions (messages) from one language to another, enabling two otherwise incompatible individuals to
communicate with each other. This assumes, of course, that the phrase book translates the messages properly
based on the context: “I need to buy some matches,” for example, might not map correctly to “My hovercraft is
full of eels” in all circumstances.
Implementation
Figure 3.1. Adapter class diagram interface
Implementing the Adapter pattern requires the following:
Framework -
The
Framework
uses the
Adapter
. It either constructs the
ConcreteAdapter
or it gets set
somewhere.
Adapter
- The interface that defines the methods the
Framework
uses.
ConcreteAdapter -
An implementation of the
Adapter
interface. It keeps a reference to the
Adaptee
and
translates the method calls from the
Framework
into method calls on the
Adaptee.
This translation also possibly
involves wrapping or modifying parameters and return types.
Adaptee -
The interface that defines the methods of the type that will be adapted. This interface allows the
specific
Adaptee
to be dynamically loaded at runtime.
ConcreteAdaptee -
An implementation of the
Adaptee
interface. The class that needs to be adapted so that the
Framework
can use this class.
For more complex communication, it can be useful to establish an action map to better understand how to manage
the communication. An action map is a table showing how the Adapter maps methods and call parameters
Table 3-1. Example action map
Framework
Adapter Action
Adaptee
method1
None
method2
argument1
None
a
rgument1
argument2
wrapper
a
rgument2
create
a
rgument3
The Unified Modeling Language (UML) can effectively represent this; typically, the sequence diagram is a useful