Adapter (patrón de diseño)


Adapter (patrón de diseño)
Adapter using inheritance UML class diagram.svg

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.

Contenido

Propósito

Convierte la interfaz de una clase en otra interfaz que el cliente espera. Adapter permite a las clases trabajar juntas, lo que de otra manera no podría hacerlo debido a sus interfaces incompatibles.

También conocido como

Wrapper (Envoltorio)

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.

Estructura

  • Una clase adaptadora usa múltiples herencias para adoptar una interfaz a otra.

ClassAdapter.png


  • Un objeto adaptador cuenta con la composición de objetos.

ObjectAdapter.png

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

Colaboraciones

  • Client llama a las operaciones sobre una instancia Adapter. De hecho, el adaptador llama a las operaciones de Adaptee que llevan a cabo el pedido.

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.

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.


package Structural_patterns;
 
public class AdapterWrapperPattern {
 
        public static void main(String args[]){
                Guitar eGuitar = new ElectricGuitar();
                eGuitar.onGuitar();
                eGuitar.offGuitar();
                Guitar eAGuitar = new ElectricAcousticGuitar();
                eAGuitar.onGuitar();
                eAGuitar.offGuitar();
        }
 
 
        public abstract class Guitar{
                abstract public void onGuitar();
                abstract public void offGuitar();
        }
 
        public class ElectricGuitar extends Guitar{
 
                public void onGuitar() {
                        System.out.println("Playing Guitar");
                }
 
                public void offGuitar() {
                        System.out.println("I'm tired to play the guitar");
                }
        }
 
        /**
         * Class to Adapter/Wrapper 
         */
        public class AcousticGuitar{
 
                public void play(){
                        System.out.println("Playing Guitar");
                }
                public void leaveGuitar(){
                        System.out.println("I'm tired to play the guitar");
                }
        }
 
        /**
         * we Adapter/Wrapper AcousticGuitar into 
         * ElectricAcousticGuitar to adapt into the GuitarModel
         */
        public class ElectricAcousticGuitar extends Guitar{
                AcousticGuitar acoustic = new AcousticGuitar();
 
                public void onGuitar() {
                        acoustic.play();
                }
 
                public void offGuitar() {
                        acoustic.leaveGuitar();
                }
        }
}

Wikimedia foundation. 2010.

Mira otros diccionarios:

  • Adapter (patrón de diseño) — El patrón Adapter 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 …   Enciclopedia Universal

  • Patrón de diseño — Saltar a navegación, búsqueda Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de… …   Wikipedia Español

  • Abstract Factory (patrón de diseño) — Abstract Factory (Fábrica Abstracta) es un patrón de diseño para el desarrollo de software. El problema que intenta solucionar este patrón es el de crear diferentes familias de objetos. Uno de los usos más comunes es el de creación de interfaces… …   Enciclopedia Universal

  • Color Graphics Adapter — «CGA» redirige aquí. Para otras acepciones, véase CGA (desambiguación). La Color Graphics Adapter (Adaptador de Gráficos de Color) o CGA, comercializada en 1981, fue la primera tarjeta gráfica en color de IBM (originalmente llamada Color/Graphics …   Wikipedia Español

  • Adaptador (informática) — En computación, un adaptador es un dispositivo de hardware o un componente software, que convierte datos transmitidos en un formato a otro. El formato de datos puede ser, por ejemplo, un mensaje enviado entre objetos en una aplicación, o un… …   Wikipedia Español

  • Nintendo Entertainment System — Nintendo Family Computer …   Wikipedia Español


Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.