Lenguaje Go - patrones de diseño - Patrón Adapter

    Hola. Vamos a empezar a ver una serie de artículos, donde vamos a tratar como implementar los diferentes patrones de diseño de software, utilizando el lenguaje Go.

    Nos basaremos en la teoría pero también en ejemplos prácticos. Empezamos con los patrones estructurales. Y en primer lugar veremos el patrón Adapter.

     El patrón Adapter o también llamado Wrapper, se basa en adaptar una interfaz en otra. Es muy usado en algunas API's, para poder reutilizar el código de una API antigua, en otra API mas moderna.  O bien simplemente tienes una clase bien probada y que sabes que funciona perfectamente, y no quieres cambiarla. Pero aún así, necesitas usarla en otra API, utilizando otros nombres para las operaciones de la clase. 
     Gráficamente el patrón Adapter viene representado como: 

 

   
    Es decir, el cliente necesita utilizar una interfaz Target con unas operaciones concretas. E imaginemos que tenemos una clase Adaptee que queremos utilizar, pero cuyas operaciones no se ajustan a las que tenemos en Target. Entonces necesitamos una clase que adapte las operaciones de Adaptee a las que necesita Target. Esta clase será Adapter.

    Vamos a verlo con un ejemplo. Supongamos que tenemos dos tipos de guitarras, una guitarra eléctrica y una guitarra acústica.  Pero ambas tienen diferentes métodos para hacerla sonar y parar. La guitarra eléctrica tiene los métodos PlayOn y PlayOff, pero la guitarra acústica tiene los métodos play y leaveGuitar.  Lo queremos es poder tocar y parar cualquier tipo de guitarra utilizando los mismos métodos. En este ejempo, queremos utilizar los métodos PlayOn y PlayOff. Por tanto, debemos adaptar la interfaz de la guitarra acústica.

    En este ejemplo, la interfaz Target por tanto, será una interfaz que nos define las dos operaciones PlayOn y PlayOff que necesitamos para cualquier tipo de guitarra, y la llamaremos IGuitar: 



   Hemos dicho que la guitarra eléctrica ya tiene las 2 operaciones PlayOn y PlayOff. Y por tanto, no necesitamos adaptarla. La clase la mostramos a continuación: 



   Luego tenemos la clase de la guitarra acústica, que en nuestra gráfica correspondería a la clase Adaptee con los métodos play y leaveGuitar, que necesitamos adaptar: 



   Por tanto, solo nos falta la clase Adapter, que adaptaría nuestra clase AcousticGuitar. Esta clase Adapter la podriamos llamar AdapterAcousticGuitar, que mostramos a continuación:



    Como vemos esta clase adaptadora, envuelve(Wrapper) a la clase AcousticGuitar, utilizando y ocultando los métodos originales al cliente.

  Por último, ya solo nos falta llamar desde el cliente a los métodos PlayOn y PlayOff de la interfaz IGuitar, utilizando cualquiera de los 2 tipos de guitarras. Vamos a utilizar además, dos funciones que se llaman playOn y playOff, que aceptaran como parámetro, cualquier objeto que cumpla con la interfaz IGuitar:



   Hasta aquí el ejemplo y este artículo. Como vemos este patrón Adapter es muy fácil de implementar en Go. El próximo día seguiremos con el patrón Bridge(puente).

¡¡¡ Saludos y hasta la próxima !!!

Comentarios

Entradas populares de este blog

Angular y generación automática de documentación de código.

Angular, css y Sass

Desplegar una aplicación Angular sobre el servicio de hosting de Firebase