|
Articoli -
Ingegneria del software
|
|
Scritto da RedBaron85
|
|
Sabato 30 Gennaio 2010 15:07 |
Design Pattern - Observer
Il Design Pattern Observer consente di notificare un cambiamento di stato di un oggetto (il Subjct, l'oggetto osservato) a tutti gli oggetti (osservatori, observers) interessati.
Fare in modo che quando un oggetto (il Subject, l'oggetto osservato) cambia stato, gli osservatori da esso dipendenti ricevano automaticamente notifica di tale cambiamento.
Alcuni oggetti dipendono dalle informazioni o dallo stato di un altro oggetto e devono essere avvertiti se questo cambia (es.: ogni volta che si sposta il mouse, le coordinate cambiano e una label le mostra; se segna una squadra, i risultati live della partita vengono automaticamente aggiornati e la pagina viene re-inviata ai browser; ...).
Bisogna far sì che un osservatore manifesti, presso il Subject, l'interesse a ricevere le notifiche.
Il Subject può quindi mettere a disposizione, ad esempio, dei metodi per aggiungere ad una lista di entità da avvertire il riferimento all'osservatore (ed eventualmente altre informazioni, come ad esempio che tipo di caratteristiche osservare o con che frequenza ricevere le notifiche, ecc...).
Il tutto si traduce, quindi, in strutture dati e metodi da implementare all'interno della classe Subject (osservata).
Aumentando il livello di astrazione, si può creare un Subject che mette a disposizione i metodi Attach(Observer), Detach(Observer) e Notify(); i soggetti saranno quindi dei ConcreteSubject, che ereditano da Subject.
I ConcreteObserver saranno a loro volta figli di un Observer.
- CONSEGUENZE (caso più astratto)
Il Subject conoscerà solo la classe Observer, non i vari ConcreteObserver.
I ConcreteSubject e i ConcreteObserver non saranno accoppiati direttamente, dunque saranno più facili da modificare, riusare, ecc... .
|
|
Ultimo aggiornamento Domenica 22 Gennaio 2012 15:25 |
Copyright © 2012 RedBaron85.com: Informatica, CG 2D e 3D, Blender, Python, Java 2D e 3D, 3D Studio e altro ancora!. Tutti i diritti riservati.