Programmazione.it v6.2
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Chat Forum
Il potere dei design pattern: se li conosci li usi (1/2)
Scritto da Fabio Carucci il 22-10-2008 ore 10:10
Prendete uno strategy pattern, un plugin pattern, un service locator pattern e un dependency injection pattern e metteteli assieme, cosa ottenete? Un bel risultato, direi ottimo. Battute a parte, andiamo per ordine.

Userò un esempio per definire uno strategy pattern: supponete di sviluppare del codice per una applicazione, che calcola buste paga per alcune categorie di lavoratori, associando diversi algoritmi di logica per ciascun tipo di lavoratore. Probabilmente scrivereste qualcosa del tipo:
  1. <span style="font-size:1.0em">
  2. public abstract class Impiegati
  3. {
  4.    public virtual void CalcolaStipendio()
  5.    {
  6.  
  7.    }
  8. }
  9.  
  10. public class Impiegato : Impiegati
  11. {
  12.    public override void CalcolaStipendio()
  13.    {    
  14.       ...
  15.    }
  16. }
  17.  
  18. public class Manager : Impiegati
  19. {
  20.    public override void CalcolaStipendio()
  21.    {    
  22.       ...
  23.    }
  24. }
  25.  
  26. public class Quadro : Impiegati
  27. {
  28.    public override void CalcolaStipendio()
  29.    {
  30.       ...
  31.    }
  32. }
  33. </span>
per ogni categoria di lavoratori dovrete mantenere - e soprattutto manutenere - l'implementazione del calcolo dello stipendio; ovviamente in un caso reale le categorie di lavoratori (ma soprattutto i contratti collettivi) sono molti di più e tendono a cambiare nel tempo, quindi la manutenzione del codice è d'obbligo. Applicando lo strategy pattern il codice diventerebbe più o meno così:
  1. <span style="font-size:1.0em">
  2. public interface ICalcolaStipendio
  3. {
  4.    void CalcolaStipendio();
  5. }
  6.  
  7. public class CalcolaImpiegato : ICalcolaStipendio
  8. {
  9.    public void CalcolaStipendio()
  10.    {
  11.       ...
  12.    }
  13. }
  14.  
  15. public class CalcolaManager: ICalcolaStipendio
  16. {
  17.    public void CalcolaStipendio()
  18.    {
  19.       ...
  20.    }
  21. }
  22.  
  23. ublic class CalcolaQuadro: ICalcolaStipendio
  24. {
  25.    public void CalcolaStipendio()
  26.    {
  27.       ...
  28.    }
  29. }
  30.  
  31. public abstract class Impiegati
  32. {
  33.    private ICalcolaStipendio calcolaStipendio;
  34.  
  35.    public void SetCalcolo(ICalcolaStipendio calcolo)
  36.    {
  37.       calcolaStipendio = calcolo;
  38.    }
  39.  
  40.    public virtual void CalcolaStipendio()
  41.    {
  42.       calcolaStipendio.CalcolaStipendio();
  43.    }
  44. }
  45.  
  46. public class Impiegato : Impiegati
  47. {
  48.    public Impiegato()
  49.    {
  50.       SetCalcolo(new CalcolaImpiegato());
  51.    }
  52. }
  53.  
  54. public class Manager : Impiegati
  55. {
  56.    public Manager()
  57.    {
  58.       SetCalcolo(new CalcolaManager());
  59.    }
  60. }
  61.  
  62. public class Quadro : Impiegati
  63. {
  64.    public Quadro()
  65.    {
  66.       SetCalcolo(new CalcolaQuadro());
  67.    }
  68. }
  69.  
  70.  
  71. class Program
  72. {
  73.    static void Main(string[] args)
  74.    {
  75.       Manager manager = new Manager();
  76.       Quadro quadro = new Quadro();
  77.       manager.CalcolaStipendo();
  78.       quadro.CalcolaStipendo();
  79.       Console.Read();
  80.    }
  81. }
  82. </span>
Non vi pare piuttosto "maneggevole" rispetto alla versione precedente? Quindi, lo strategy pattern si adotta dichiarando una abstract class con, al suo interno, un metodo che contiene l'algoritmo; quest'ultimo viene implementato ereditandolo dalle classi concrete.
Precedente: Alcuni consigli per ringiovanire e migliorare un sito web
Successiva: Primi passi con CakePHP
Copyright Programmazione.it™ 1999-2009. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 2.029 secondi. Sito ottimizzato per Mozilla Firefox. Powered by Kyron.