martes, 19 de mayo de 2009

Adapter


Nombre del patrón
Adapter

Clasificación del patrón
Estructural.

Intención
Convertir la interfaz de una clase en otra interfaz que el cliente espera.
El adapter permite que clases trabajen juntas, que de otra manera no podrían por las interfaces incompatibles.

También conocido como
Class Adapter y Object Adapter
Wrapper (Envolvente)

Motivación
A veces una clase es diseñada para que sea reusable, pero no lo es, porque la interfaz no concuerda con la interfaz que una aplicación requiere.

Aplicabilidad

Usamos el patrón Adapter cuando:

  • Queremos usar una clase existente y su interfaz no es compatible con lo que necesitamos.
  • Se quiere crear una clase reusable que coopere con clases no relacionadas o imprevistas, esto es, clases que no tienen interfaces compatibles necesariamente.
  • (object adapter solamente) necesita usar varias subclases existentes, pero no es practico adaptar sus interfaces haciendo “subclassing” por cada una. Un object adapter puede adaptar la interfaz de su clase padre (parent).

Estructura

Una clase Adapter usa herencia múltiple para adaptar una interfaz a otra.
Un objeto adaptador depende de la composición de objetos.


Participantes

  • Target Define el dominio especifico de la interfaz que el cliente usa.
  • Client Colabora con los objetos conformando la interfaz Target.
  • Adaptee Define la interfaz existente que necesitamos adaptar.
  • Adapter Adapta la interfaz de Adaptee a la interfaz Target

Colaboraciones
El Cliente llama a las operaciones en la instancia del Adapter. Luego, el Adapter llama al Adaptee (el Adaptado) y lleva a cabo las operaciones pedidas

Consecuencias

Clases y objetos adapter tiene diferentes oficios.

Class Adapter

  • Adapta el Adaptee al Target informando a un class Adapter concreto. Como consecuencia, un class Adapter no funciona cuando queremos adaptar una clase y todas sus subclases (subclassing).
  • El Adapter sobrescribe el comportamiento del Adaptee ya que el Adapter es una subclase del Adaptee.
  • Introduce solamente un objeto y no hay un puntero adicional para conseguir el Adaptee

Object Adapter

  • Un Adapter puede trabajar con múltiples Adaptees, esto es, el Adaptee en sí y todas sus subclases.
  • Hace más difícil de sobrescribir el comportamiento de Adpatee. Requerirá hacer subclasssing de Adaptee y hacer que el Adapter se remita a las subclases en vez del Adaptee en si.

Implementación
Adaptadores enchufables (pluggable adapters)
La adaptación de interfaz está construida en una clase, que así puede usar varias clases con distintas interfaces
Los pasos a seguir para implementarlo son:

  1. Definir la interfaz mínima para los adaptados.
  2. Implementar, por ejemplo, usando métodos abstractos para los métodos de la interfaz adaptada

Usos Conocidos

  • Clases adaptadoras del JDK
  • Para gestionar eventos un objeto debe implementar EventListener
  • Para gestionar eventos de objetos de tipo Window debe implementar la interfaz

Patrones relacionados

Bridge: Tiene una estructura similar al Adapter, pero un intento diferente: Su propósito es separar la interfaz de su implementación así esta puede variar fácilmente y de forma independiente. El propósito del Adapter es el cambio de interfaz de un objeto existente.
Decorator: Agrega responsabilidades a un objeto dinámicamente sin cambiar su interfaz.
Un Decorator en cambio es más transparente a la aplicación que un Adapter, como consecuencia soporta composición recursiva, lo cual no es posible con el patrón Adapter.
Proxy: Define un lugar para otro objeto para controlar el acceso y no cambia su interfaz.

Referencias Bibliográficas
Design Patterns Elements of Reusable Object-Oriented Software, GoF.
http://www.lsi.us.es/docencia/get.php?id=1378
www.cbernardi.com.ar/ftppublic/articulos/patrones/Patron%20Adapter.doc
http://grasia.fdi.ucm.es/jpavon/patrones/patronesestructurales.pdf

No hay comentarios:

Publicar un comentario