JavaScript — Patrones de diseño en JS — Estructurales (Parte I)

Mauricio Garcia
3 min readJun 15, 2020

--

Temario

  • Class— Adapter

i. Structural — Class — Adapter

El diseño de este patrón es estructural, de tipo clase, al implementarlo nos da la flexibilidad de adaptar dos interfaces que no son compatibles entre sí.

Este patrón es muy usado cuando se refactoriza una API, donde, al final ya no es compatible con la original, entonces, creamos una especie de adaptador (que es otra clase) para que ambas puedan trabajar juntas en la aplicación.

:: Ejemplo 1

:: Ejemplo 2

Imagina que hemos decidido hacer una calculadora, así que nuestra primera versión es la siguiente:

Creamos la clase Calculator, acepta 3 atributos num1, num2, operation, donde este último es el encargado de saber qué operación va a realizar.

La forma de usar la clase es la siguiente:

— Ver ejemplo completo

Con el paso del tiempo surge la necesidad de hacer un refactor completo del código, donde queda de la siguiente manera:

Instanciamos, y realizamos operaciones:

— Ejemplo completo

Podemos observar que el refactor ya no es compatible con la otra versión. Entonces, debemos crear un adaptador, para que funcionen ambas versiones:

La nueva versión, le cambiamos el nombre a la clase:

Ahora lo que hacemos es adaptar nuestra clase Calculator, para que pueda funcionar con la nueva versión:

Ahora podemos instanciar el original con el adaptador CalculatorAdapter (podemos conservar el nombre de la clase Calculator) o el nuevo NewCalculator:

— Ejemplo completo

Se recomienda usar cuando…

  • Cuando necesitamos usar una clase existente pero que no es compatible con nuestra aplicación.

La ventaja de usarlo…

  • Cumple con el principio de SOLID (Principio de responsabilidad única).
  • Cumple con el principio de SOLID (Abierto / cerrado), podemos introducir nuevos tipos de adaptadores en el programa sin romper el código del cliente existente.

La desventaja de usarlo…

  • La complejidad del código aumenta, ya que se necesita introducir un conjunto de nuevas interfaces y clases.

--

--

Responses (1)