Usare il pattern Strategy in C#
Il pattern Strategy fa parte dei behavioral design pattern, e permette di definire una famiglia di "algoritmi" e renderli facilmente interscambiabili.
In sostanza possiamo richiamare un algoritmo, farci delle operazioni, e poi cambiarlo a runtime.
Nel nostro esempio avremo un metodo per la somma e uno per la sottrazione.
Nell'esempio non ho considerato eventuali gestione degli errori (ad esempio la sottrazione non può essere negativa, ecc).
Mi limito ad eseguire le operazioni e cambiarle giusto per vedere il funzionamento di strategy.
Detto ciò vediamone un esempio in C#, cominciando dalla interfaccia a da due implementazioni:
public interface IOperazioneStrategy
{
double Operazione(double valore);
}
public class SommaStrategy : IOperazioneStrategy
{
public double Operazione(double valore)
{
return valore + 13;
}
}
public class SottrazioneStrategy : IOperazioneStrategy
{
public double Operazione(double valore)
{
return valore - 13;
}
}
Nulla di particolare.
Qui sotto la classe che fa la magia:
public class OperazioneCtx
{
private IOperazioneStrategy _operazioneStrategy;
public OperazioneCtx(IOperazioneStrategy operazioneStrategy)
{
_operazioneStrategy = operazioneStrategy;
}
public double EseguieStrategy(double valore)
{
return _operazioneStrategy.Operazione(valore);
}
public void CambiaStrategy(IOperazioneStrategy strategy)
{
_operazioneStrategy = strategy;
}
}
In sostanza ha due metodi:
- uno per esegure l'algoritmo scelto
- l'altro per cambiarlo
A questo punto richiamiamo tutto così:
public class MainClass
{
public static void Main(string[] args)
{
var ctx = new OperazioneCtx(new SommaStrategy());
double res = ctx.EseguieStrategy(10);
Console.WriteLine(res);
ctx.CambiaStrategy(new SottrazioneStrategy());
res = ctx.EseguieStrategy(70);
Console.WriteLine(res);
}
}
Enjoy!
c# strategy
Commentami!