Post

Observer

In Design Patterns on marzo 26, 2010 by poyblog Messo il tag: ,

Intento:

Definire una dipendenza di tipo uno a molti fra oggetti così che quando uno dei molti oggetti cambia stato anche tutti quelli riferiti allo stesso vengono aggiornati di conseguenza.

Applicabilità:

Il pattern Observer è da utilizzare quando:

  • una astrazione ha due aspetti diversi l’uno che dipende dall’altro. Incapsulare questi due aspetti in oggetti separati permette di variare e riutilizzare questi in modo indipendente.
  • Il cambiamento di un oggetto richiede l’aggiornamento anche di altri oggetti, dei quali non si conosce il numero
  • un oggetto deve essere in grado di aggiornare altri oggetti senza sapere chi sono questi oggetti

Partecipanti:

  • Subject → conosce i suoi osservatori. Un numero variabile di Observer può osservare un soggetto; fornisce inoltre una interfaccia per agganciare e sganciare oggetti di tipo Observer
  • Observer → definisce una interfaccia di aggiornamento per notificare tutti gli oggetti dell’avvenuto cambiamento nel soggetto
  • ConcreteSubject → mantiene gli stati di interesse degli oggetti ConcreteObserver. Invia una notifica ai suoi osservatori quando cambia stato
  • ConcreteObserver → mantiene un riferimento rispetto all’oggetto ConcerteSubject; immagazzina gli stato che potrebbero essere consistenti con quello dei soggetti ed infine implementa Observer aggiornando l’interfaccia per mantenerla al passo con quella del soggetto

Conseguenze:

  • Viene astratto l’accoppiamento fra Soggetto e Osservatore.
  • Viene supportata la comunicazione di tipo broadcast
  • Possono esserci però degli aggiornamento non aspettati che compromettono l’intera struttura, dato che un solo aggiornamento comporta il cambio anche ti tutti gli oggetti correlati

Una Risposta a “Observer”

  1. [...] Observer [...]

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Iscriviti

Get every new post delivered to your Inbox.