viernes, 29 de julio de 2022

🔧 Patrón de diseño Strategy

Strategy es un patrón de diseño de comportamiento que nos permite implementar diferentes algorítmos sin que el cliente o contexto sepa que es lo que hay detrás.

Diagrama

Diagrama UML de Strategy

Para aplicar esto utilizarémos un contexto de un sistema de calculadora.

Interface Strategy

Esta interface nos permitirá seguir la misma regla en todas nuestrás clases.

export interface OperationStrategy {    execute(a: number, b: number): number}

Clases concretas

Las clases concretas son las que implementarán nuestra interface aplicando el método execute

Operación de suma

export class OperationAdd implements OperationStrategy {    execute(a: number, b: number): number {        return a + b    }}

Operación de resta

export class OperationSubstract implements OperationStrategy {    execute(a: number, b: number): number {        return a - b    }}

Operación de multiplicación

export class OperationMultiply implements OperationStrategy {    execute(a: number, b: number): number {        return a * b    }}

Context

El contexto se podría defininir como el caso de uso. La clase Calculator es quien usa las implementacíones pero sin saber que es lo que está sucediendo en cada clase de operación, Esto permite tener un código más estructurado, mantenible y desacoplado.

export class Calculador {    private operation: OperationStrategy    constructor(operation: OperationStrategy) {        this.operation = operation    }    changeStrategy(operation: OperationStrategy) {        this.operation = operation    }    calculate(a: number, b: number) {        return this.operation.execute(a, b)    }}

Uso

const calculator = new Calculador(new OperationAdd())const result = calculator.calculate(10, 5)calculator.changeStrategy(new OperationSubstract())const result1 = calculator.calculate(10, 5)calculator.changeStrategy(new OperationMultiply())const result2 = calculator.calculate(10, 5)console.log(result) // 15console.log(result1) // 5console.log(result2) // 50
Desarrollado con Nuxt 3 💚
Erik Ciau Apple Emoji To Love