Strategy — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

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
	}
}