Antonio Esposito's


Prodotti tipici .NETtiani

Un semplice Observer in .NET

Il pattern Observer è uno dei pattern creazionali più diffusi. Un observer è un oggetto che controlla se qualosa succede... questo qualcosa puo essere implementato con delle funzioni o metodi, o più velocemente con degli eventi. L'uso è molteplice specialmente in risposta a input utente.

L'Observer è costituito da una interfaccia che corrisponde all'oggetto da controllare (detto Subject) e una interfaccia observer vera e propria:

interface ISubject {
   void AttachObserver(IObserver o);
   void DetachObserver(IObserver o);
   void NotifyMessage(string message);
}
interface IObserver {
   void Update(string message)
}
class Subject : ISubject {
   private List<IObserver> Observers = new List<IObserver>();
   void AttachObserver(IObserver o) { Observers.Add(o);  }
   void DetachObserver(IObserver o) { Observers.Remove(o); }
   void NotifyMessage(string message)
   {
       foreach (IObserver o in Observers) { o.Update(message);  } // notifico il messaggio a tutti gli observer collegati
    } 
}
class Observer : IObserver {
   void Update(string message) {  System.Diagnostics.Trace.WriteLine(message); }
}

In una implementazione ad eventi:

interface ISubject {
   delegate void NotifyEventHandler(string message);
   void AttachObserver(IObserver o);
   void DetachObserver(IObserver o);
   event NotifyEventHandler NotifyMessage;
}
interface IObserver {
   void Update(string message)
}
class Subject : ISubject {
   //sparisce la lista perchè il gestore degli eventi è in grado di funzionare con più handler
   void AttachObserver(IObserver o) { Notify += o.Update; } // if Notify!=null non si fa perchè deve poter gestire più observer
   void DetachObserver(IObserver o) { Notify -= o.Update; } 
   public event Notify;
}
class Observer : IObserver {
   void Update(string message) {  System.Diagnostics.Trace.WriteLine(message); }
}

come si puo notare, l'implementazione ad eventi in .NET è molto pulita e rapida da realizzare..

mercoledì, 20 gen 2010 Ore. 14.32
Statistiche
  • Views Home Page: 10.725
  • Views Posts: 58.964
  • Views Gallerie: 0
  • n° Posts: 44
  • n° Commenti: 16
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003