Principii și arhitectură / Șabloane de proiectare / Comportamentale
Strategy
Note originale de SunDiaL · Vezi sursa în engleză
Problema: La fel ca în cazul Template Method, o parte a sistemului tău variază ca implementare; însă, în loc să fie un pas izolat dintr-un algoritm, este întregul algoritm. Soluția: Ascunde variația în spatele unei abstracții.
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
}
}