Adapter Pattern
Overview
Convert the interface of a class into another interface the client expects.
Adapter lets classes work together that couldn't otherwise
because of incompatible interfaces.
Participants
- defines the domain-specific interface.
- this participant can not be a class if the class adapter (see below) version is chosen.
- defines an existing interface that needs adapting.
- adapts the interface of Adaptee to the Target interface.
- this participant can not be an interface.
- this participant can not be read-only.
Parameters
-
here you can specify the name of an attribute where Adapter keeps a reference
to the Adaptee object.
Initialization variant
-
the "Initialization variant" option defines the kind of initialization of that attribute.
-
name of target method that uses the adaptee to perform a task.
-
when selected, will create special JavaDoc links in the code between pattern participants, describing
their relationships.
There are two variations of the Adapter pattern, object adapter and class adapter:
Class adapter
- adapts Adaptee to Target by committing to a concrete Adapter class. As
a consequence, a class adapter won't work when you want to adapt a class
and all its subclasses.
-
lets Adapter override some of Adaptee's behavior, since Adapter is a subclass of Adaptee.
-
introduces only one object, and no additional pointer indirection is needed to get to the adaptee.
Object adapter
-
lets a single Adapter work with many Adaptees - that is, the Adaptee itself and all of its
subclasses (if any). The Adapter can also add functionality to all Adaptees at once.
-
makes it harder to override Adaptee behavior. It will require subclassing Adaptee and making
Adapter refer to the subclass rather than the Adaptee itself.
Applicability
Use the Adapter pattern when
- you want to use an existing class, and its interface does not match the one
you need.
- you want to create a reusable class that cooperates with unrelated or unforeseen classes, that is,
classes that don't necessarily have compatible interfaces.
- (object adapter only) you need to use several existing subclasses, but it's impractical
to adapt their interface by subclassing every one. An object adapter can adapt the interface of its
parent class.