Programmazione.it v6.4
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 Forum
Java Design Pattern: usare il pattern Strategy (2/3)
Scritto da Serenella Sisca il 20-03-2008 ore 10:30
Per implementare l'esempio descritto nell'articolo precedente usando il pattern Strategy, incominciamo col creare la classe astratta PlotStrategy, che costituirà la base per la creazione di tutte le strategie di esecuzione e si interfaccerà con il Context:
  1. <span style="font-size:1.0em">public abstract class PlotStrategy extends JFrame{ 
  2. protected float[] x, y;
  3. protected Color color;
  4. protected int width, height;
  5.  
  6. public PlotStrategy(String title) {
  7. super(title);
  8. width = 300; height =200;
  9. color = Color.black;
  10. addWindowListener(new WindAp(this));
  11. }
  12.  
  13. //tutte le classi eredi dovranno implementare un proprio metodo <i>plot</i>
  14.  
  15. public abstract void plot(float xp[], float yp[]);
  16.  
  17. public void setPenColor(Color c) {
  18. color = c;}
  19.  
  20. class WindAp extends WindowAdapter{
  21. JFrame fr;
  22. public WindAp(JFrame f) {fr = f; }
  23. public void WindowClosing(WindowEvent e) {fr.setVisible(false);}
  24. }
  25.  
  26. //la selezione di una delle due strategie da usare per il <i>plot</i> avverrà all’interno di un oggetto <i>Context</i>
  27.  
  28. public class Context{ 
  29.  
  30. //creiamo un’istanza della classe astratta <i>PlotStrategy</i> all’interno del <i>Context</i>
  31.  
  32. private <i>PlotStrategy</i> <i>plotStrategy</i>;
  33.  
  34. float x[], y[];
  35.  
  36. //i dati verranno visualizzati come diagramma lineare per default
  37.  
  38. public Context() {
  39. setLinePlot();}
  40.  
  41. //se si sceglie la visualizzazione tramite diagramma lineare
  42. public void setLinePlot()
  43.  
  44. { plotStrategy = new LinePlotStrategy(); }
  45.  
  46. //se la strategia scelta è la visualizzazione tramite istogramma
  47. public void setBarPlot()
  48.  
  49. { plotStrategy = new BarPlotStrategy(); }
  50.  
  51. //effettua una chiamata al metodo <i>plot</i> della strategia corrente
  52. public void plot() { plotStrategy.plot(x, y); }
  53.  
  54. public void setPenColor(Color c) { plotStrategy.setPenColor(c); }
  55.  
  56. public void readData(String filename){ }
  57. }
  58.  
  59. //creiamo il pulsante per la scelta della visualizzazione tramite diagramma lineare 
  60.  
  61. public class JGraphButton extends JButton implements Command {
  62. Context context;
  63.  
  64. //il costruttore riceve come parametro un oggetto <i>Context</i>
  65.  
  66. public JGraphButton(ActionListener act, Context ctx){
  67. super("Line graph"); 
  68. addActionListener(act); 
  69. context = ctx; 
  70.  
  71. //il client comunica al <i>Context</i> la propria scelta ed è il <i>Context</i> a richiamare i metodi adatti
  72.  
  73. public void Execute() {
  74. context.setPenColor(Color.red); 
  75. context.setLinePlot(); 
  76. context.readData("data.txt"); 
  77.  
  78. //legge i dati e ne effettua il <i>plottaggio</i> usando il metodo <i>plot</i> dell’oggetto <i>Context</i>, che richiama il metodo plot della scelta corrente, la scelta “diagramma lineare” nel nostro caso
  79.  
  80. context.plot();
  81.  }
  82. }
  83. …</span>


Come si può facilmente intuire, l’implementazione del pulsante per la scelta della visualizzazione a istogramma è molto simile. Ora manca solo l’implementazione concreta degli algoritmi di scelta per il diagramma lineare e per l’istogramma.
Precedente: Reti neurali quantiche (1/2)
Successiva: La notte che fu spento l'IPv4
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.304 secondi.