Tuesday, April 5, 2011

Design Pattern: Adapter

It falls into structural pattern category. The Adapter pattern allows otherwise incompatible classes to work together by converting the interface of one class into an interface expected by the clients. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.

imageimage

image

•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.
  • 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.

Structure

image

Collaborations

Clients call operations on an Adapter instance. In turn, the adapter calls Adaptee operations that carry out the request.

Consequences:

Class and object adapters have different trade-offs.

A: class adapter:

1. Adapts Adapter to target by committing to a concrete Adapter class. As a consequence, a class adapter won’t work when we want to adapt a class and all its subclasses.

2. Lets-adapter override some of Adaptee’s behavior, since Adapter is a subclass of Adaptee.

3. Introduces only one object, and no additional pointer indirection is needed to get to the Adaptee

B: Object adapter:

1.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.

2. Makes it harder to overide Adaptee behavior. It will require subclassing Adaptee and making Adapter refer to the subclass rather than the Adapter itself.

Issues to be considered while using adapter pattern:

1. How much adapting does Adapter do?

  • Pluggable adapters.
  • Using two-way adapters to provide transparency

No comments: