Strategy — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

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