Patrón Template Method

[ Arquitectura  ]

El patrón Template Method nos permite definir un esqueleto de métodos abstractos en los que cada clase concreta sobrecargará estos métodos para definir su comportamiento específico y cuya implementación difiera en algunos pasos.

De esta forma, definimos una clase con métodos abstractos como si fuera un contrato o interfaz, y posteriomente definiremos una clase que herede esta superclase y en la que codificaremos cada método con su algoritmo específico.

Una vez más usaremos el ejemplo de los libros y le daremos otra solución al calculo del IVA desde la perspectiva Template Method.

Veamos el ejemplo:


public abstract class Pedido {
    protected double ImporteSinIva;
    protected double Iva;
    protected double ImporteTotal;

    public abstract void CalcularIva();

    public void CalculaPrecioTotal()
    {
        CalcularIva();
        ImporteTotal = ImporteSinIva + Iva;
    }

    public void SetImporteSinIva(double importeSinIva)
    {
        ImporteSinIva = importeSinIva;
    }

    public void Imprime()
    {
        Console.WriteLine("Pedido");
        Console.WriteLine($"Importe Sin IVA {ImporteSinIva} , IVA {Iva}");
        Console.WriteLine($"Importe Total {ImporteTotal}");
    }
}

public class PedidoEspaña : Pedido {
    public override void CalcularIva()
    {
        Iva = ImporteSinIva * 0.21;
    }
}

public class PedidoMexico : Pedido {
    public override void CalcularIva()
    {
        Iva = ImporteSinIva * 0.16;
    }
}

public class Usuario {
    static void Main(string[] args) {
        Pedido pedidoEspaña = new PedidoEspaña();
        pedidoEspaña.SetImporteSinIva(1000);
        pedidoEspaña.CalcularIva();
        pedidoEspaña.CalculaPrecioTotal();
        pedidoEspaña.Imprime();

        Pedido pedidoMexico = new PedidoMexico();
        pedidoMexico.SetImporteSinIva(1000);
        pedidoMexico.CalcularIva();
        pedidoMexico.CalculaPrecioTotal();
        pedidoMexico.Imprime();
    }
}

Saludos.




@2017/@2024 - JRRN