Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Observer pattern - Teknopedia
Observer pattern - Teknopedia

L'Observer pattern è un design pattern utilizzato come base architetturale di molti sistemi di gestione di eventi.

Descrizione

[modifica | modifica wikitesto]

Molti paradigmi di programmazione legati agli eventi, utilizzati anche quando ancora non era diffusa la programmazione ad oggetti, sono riconducibili a questo pattern. È possibile individuarlo in maniera rudimentale nella programmazione di sistema Windows, o in altri framework di sviluppo che richiedono la gestione di eventi provenienti da diversi oggetti, come ad esempio la funzione "OnMsgProc" per la gestione delle code di messaggi windows.

Sostanzialmente il pattern si basa su uno o più oggetti, chiamati osservatori o observer, che vengono registrati per gestire un evento che potrebbe essere generato dall'oggetto "osservato", che può essere chiamato soggetto.

Oltre all'observer esiste il concrete Observer, che si differenzia dal primo in quanto implementa direttamente le azioni da compiere in risposta ad un messaggio; riepilogando, il primo è una classe astratta, il secondo no.

Uno degli aspetti fondamentali è che tutto il funzionamento dell'observer si basa su meccanismi di callback, implementabili in diversi modi, o tramite funzioni virtuali o tramite puntatori a funzioni passati quali argomenti nel momento della registrazione dell'observer, e spesso a questa funzione vengono passati dei parametri in fase di generazione dell'evento.

Attori

[modifica | modifica wikitesto]

In generale il pattern impiega le seguenti classi:

Soggetto

[modifica | modifica wikitesto]

Una classe che fornisce interfacce per registrare o rimuovere gli observer e che implementa le seguenti funzioni:

  • Attach(observer)
  • Detach(observer)
  • Notify()

N.B. La funzione Notify() viene implementata con un loop su tutti i ConcreteObserver, dove ciascuno di essi chiama la funzione Update(). Notify() viene eseguita dal Soggetto Concreto per notificare un cambio del suo stato. (vedi sotto)

Soggetto Concreto

[modifica | modifica wikitesto]

Questa classe contiene l'attributo

  • subjectState

il quale descrive lo stato del soggetto.

Inoltre, essa contiene le funzioni:

  • GetState() - che restituisce lo stato del soggetto.
  • SetState() - che setta lo stato del soggetto.

N.B. Entrambe le funzioni vengono chiamate da ogni ConcreteObserver dopo aver ricevuto un Update()

Questa classe:

  • fornisce lo stato del Soggetto agli observer
  • si occupa di notificare gli observers chiamando la funzione Notify() definita nella classe padre (Soggetto).

Observer

[modifica | modifica wikitesto]

Questa classe definisce un'interfaccia per tutti gli observers, per ricevere le notifiche dal soggetto. È utilizzata come classe astratta per implementare i veri Observer, ossia i ConcreteObserver.

Funzioni:

  • Update() - una funzione astratta che deve essere implementata dai ConcreteObserver.

ConcreteObserver

[modifica | modifica wikitesto]

Questa classe mantiene un riferimento

  • subject

al Soggetto Concreto, per ricevere lo stato quando avviene una notifica.

Alla classe appartiene inoltre l'attributo

  • observerState

il quale contiene lo stato del ConcreteObserver.

Il ConcreteObserver implementa la funzione astratta Update(): quando questa viene chiamata dal Soggetto Concreto, il ConcreteObserver chiama la funzione GetState() sul soggetto concreto per aggiornare il suo nuovo stato. Ciò viene così fatto:

  • observerState = subject->GetState()

L'Observer pattern in C#

[modifica | modifica wikitesto]

In C# tipicamente, il pattern observer è implementato tramite

  • classe Object (classe base che implementa la gestione degli eventi)
  • classe da controllare (Concrete Subject) derivata da Object
  • dichiarazione di Evento (Observer o listener)
  • delegato (puntatore a funzione) che definisce il prototipo della funzione che sarà registrata quale Concrete Observer.

Bibliografia

[modifica | modifica wikitesto]
  • (EN) Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995, pp. 293-303, ISBN 0-201-63361-2.

Altri progetti

[modifica | modifica wikitesto]

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file sull'Observer pattern
V · D · M
Design pattern
CreazionaliAbstract factory · Builder · Factory · Prototype · Singleton
StrutturaliAdapter · Bridge · Composite · Container pattern · Decorator · Façade · Flyweight · Proxy
ComportamentaliChain-of-responsibility · Command · Interpreter · Iterator · Mediator · Memento · Observer · State · Strategy · Template method · Visitor
Pattern di concorrenzaActive object · Balking · Binding properties · Double-checked locking · Event-based asynchronous · Guarded suspension · Join · Lock · Monitor · Proactor · Reactor · Read write lock · Scheduler · Thread pool · Thread-local storage
Pattern architetturaliFront controller · Interceptor · MVC · n-tier · Specification · Publish–subscribe · Naked objects · Service locator · Active record · Identity map · Data Access Object · Data transfer object · ADR · Inversione del controllo
Altri
pattern
Blackboard · Business delegate · Composite entity · Dependency injection · Intercepting filter · Lazy loading · Mock object · Null object · Object pool · Servant · Twin · Type tunnel
LibriDesign Patterns · Enterprise Integration Patterns
PersoneChristopher Alexander · Erich Gamma · Ralph Johnson · John Vlissides · Grady Booch · Kent Beck · Ward Cunningham · Martin Fowler · Robert Martin · Jim Coplien · Douglas Schmidt · Linda Rising
ComunitàThe Hillside Group · The Portland Pattern Repository
  Portale Design
  Portale Informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Observer_pattern&oldid=137644326"

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022