domingo, 7 de julio de 2013

ADAPTER (ADAPTADOR)



El patrón Adapter (Adaptador) se utiliza para transformar una interfaz en otra, de tal modo que una clase que no pudiera utilizar la primera, haga uso de ella a través de la segunda.
Es patrón estructural muy eficaz así como sencillo. Se puede utilizar en muchos contextos y es de especialidad utilidad cuando se utilizan códigos o librerías ajenos al que estamos utilizando y sobre el que no tenemos control. Este patrón se le conoce como adaptador o adapter en inglés, aunque algunos lo llaman también wrapper, que viene siendo como envoltorio. Ambos nombres tienen bastante sentido y explican el porqué de este patrón.

Descripción
Es un patrón de diseño para encapsular las funciones y datos proporcionados por APIs existentes no orientadas a objeto, dentro de interfaces de clases orientadas a objeto aportando los beneficios de ser más concisas, robustas, mantenibles y portables.

 

Participantes

  • Target define la interfaz específica del dominio que Client usa.
  • Client colabora con la conformación de objetos para la interfaz Target.
  • Adaptee define una interfaz existente que necesita adaptarse
  • Adapter adapta la interfaz de Adaptee a la interfaz Target

Aplicabilidad

usar el patrón Adapter cuando:

  • Se desea usar una clase existente, y su interfaz no se iguala con la necesitada.
  • Cuando se desea crear una clase reusable que coopera con clases no relacionadas, es decir, las clases no tienen necesariamente interfaces compatibles.

Consecuencias

los adaptadores de clase y objetos tienen diferentes trade-off
  • Un adaptador de clase:
    • Adapta Adaptee a Target encargando a una clase Adaptee concreta. Como consecuencia, una clase adaptadora no funcionará cuando se desea adaptar una clase y todas sus subclases.
    • Permite a los Adapter sobrescribir algo de comportamiento de Adaptee, ya que Adapter es una subclase de Adaptee.
  • Un adaptador de objeto:
    • Permite que un único Adapter trabaje con muchos Adaptees, es decir, el Adapter por sí mismo y las subclases (si es que la tiene). El Adapter también puede agregar funcionalidad a todos los Adaptees de una sola vez.
    • Hace difícil sobrescribir el comportamiento de Adaptee. Esto requerirá derivar Adaptee y hacer que Adapter se refiera a la subclase en lugar que al Adaptee por sí mismo.
Aquí hay otras cuestiones a considerar cuando se utiliza el patrón Adapter:

  • 1.¿Cuanta adaptación hace el Adapter? Adapter varía en la cantidad de trabajo que hace para adaptar Adaptee a la interfaz Target. Hay un espectro de trabajo posible, desde una simple conversión (por ejemplo, cambiando los nombres de las operaciones) hasta soportando un conjunto de operaciones enteramente diferentes. La cantidad de trabajo que Adapter hace depende de cuanto de similar tienen la interfaz Target con Adaptee.
  • 2.Adaptadores Pluggables Una clase es más reusable cuando se minimiza la suposición de que otras clases deben utilizarla. Mediante la construcción en una clase de la adaptación de una interfaz, se elimina la suposición de que otras clases ven la misma interfaz. Dicho de otra manera, la adaptación de la interfaz nos permite incorporar a nuestra clase en sistemas existentes que pueden esperar diferentes interfaces de la misma.


Los adaptadores de clases y de objetos tienen ventajas e inconvenientes. Un adaptador de clases


  • Adapta una clase Adaptable a Objetivo, pero se refiere únicamente a una clase Adaptable  pos creada. Por tanto, un adaptador de clases nos servirá cuando lo queremos es adaptar una clase y todas sus subclases.

  • Permite que Adaptador redefina parte del comportamiento de Adaptable, por ser Adaptador una subclase de Adaptable.

  • Introduce un solo objeto, y no se necesita ningún  postero de indirección adicional para obtener el objeto adaptado.

 Por su parte un adaptador de objetos:


  • Permite que un mismo adaptador funcione con muchos Adaptadores –es decir, con el adaptable en si y todas sus subclases, en caso de que las tenga-. El adaptador también puede añadir funcionalidad a todos los adaptadores a la vez.

No hay comentarios:

Publicar un comentario