Principios y arquitectura / Patrones de diseño / De comportamiento
Strategy
Notas originales de SunDiaL · Ver fuente en inglés
El problema: Al igual que en Template Method, una parte del sistema varía en su implementación, pero, en lugar de ser un paso aislado de un algoritmo, es el algoritmo completo. La solución: Extraer la variación detrás de una abstracción.
public class System
{
private IPaymentProvider paymentProvider;
public System(IPaymentProvider paymentProvider)
{
this.paymentProvider = paymentProvider;
}
public void SomeMethod()
{
//do something
paymentProvider.Pay(25);
}
}
public interface IPaymentProvider
{
public void Pay(double amount);
}
public class PaypalPaymentProvider : IPaymentProvider
{
public void Pay(double amount)
{
//complex logic here
}
}
public class StripePaymentProvider : IPaymentProvider
{
public void Pay(double amount)
{
//complex logic here
}
}