22 de julio de 2014

     El patrón Adapter permite la colaboración entre clases con interfaces incompatibles.
En otras palabras, adapta la interfaz de una clase de modo que esta nueva interfaz sea la que espera el cliente. El patrón Adapter ayuda a que dos clases con interfaces incompatibles puedan trabajar juntas. 


Aplicabilidad:
  • Se desea emplear una clase existente que no es compatible con la interfaz que se le requiere.
  • Se desea crear una clase reutilizable que coopere con clases no relacionadas.
  • Se desea usar diversas subclases existentes pero resulta impráctico adaptar sus interfaces mediante la extensión de todas ellas por lo que se emplea un objeto adaptador de la clase padre.

    Estructura:
    En la siguiente imagen podemos ver un diagrama UML de este patrón:



    Participantes:
    • Objetivo o Target (ITarget): Define la interfaz dependiente del dominio usada por el cliente.
    • Cliente: Colabora con los objetos de acuerdo con el interfaz Objetivo o Target.
    • Adaptado: Define una interfaz existente que necesita ser adaptada.
    • Adaptador: Adapta la interfaz del adaptado a la interfaz Objetivo

    Colaboraciones:
         El cliente envía mensajes al adaptador y éste en repuesta los envía al objeto adaptado.


    Concecuencias:
         En ocasiones, permite la incorporación de funcionalidades no disponibles en la clase adaptada.

    • Clase adaptadora:
      • No permite adaptar una clase y todas sus subclases.
      • La clase adaptadora permite redefinir parte del comportamiento del adaptado. 
    • Objeto adaptador:
      • Un adaptador permite adaptar a diversos objetos que poseen un antecesor común.
      • Difícil cambiar el comportamiento del adaptado. Para ello sería necesario extender el objeto adaptado y adaptar la nueva subclase.

    Implementación:
         Crear una nueva clase que será el Adaptador, que extienda del componente existente e implemente la interfaz obligatoria. De este modo, tenemos la funcionalidad que queríamos y cumplimos la condición de implementar la interfaz. 
    La diferencia entre los patrones Adapter y Facade, es que el primero reutiliza una interfaz ya existente, mientras que el segundo define una nueva con el objetivo de simplificarla.


    Patrones relacionados:
    • Bridge: Tiene una estructura similar al Adapter, pero con una funcionalidad diferente: Su propósito es separar la interfaz de su implementación así esta puede variar fácilmente y de forma independiente. En cambio, 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 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 punto de acceso para otro objeto, en dónde se controlara el acceso. Este tampoco cambia su interfaz.
    Subscribe to RSS Feed Follow me on Twitter!