Beobachter-Muster

Das Beobachter-Muster (auch bekannt als. Abhängige, veröffentlichen Sie/unterzeichnen) ist ein Softwaredesignmuster, in dem ein Gegenstand, genannt das Thema, eine Liste seiner Abhängigen, genannt Beobachter aufrechterhält, und sie automatisch irgendwelcher Zustandsänderungen, gewöhnlich durch das Benennen von einer ihrer Methoden bekannt gibt. Es wird hauptsächlich verwendet, um verteilte Ereignis-Berühren-Systeme durchzuführen. Beobachter ist auch ein Schlüsselteil im vertrauten MVC architektonischen Muster. Tatsächlich wurde das Beobachter-Muster zuerst im gestützten Benutzerschnittstelle-Fachwerk des MVC des Plausches durchgeführt.

Zusammenhängende Muster: Vermittler, Singleton.

Struktur

Definition

Die Essenz des Beobachter-Musters soll eine one-many Abhängigkeit zwischen Gegenständen so dass "definieren, wenn ein Gegenstand-Änderungsstaat, seine alle Abhängigen benachrichtigt und automatisch aktualisiert werden.".

Beispiel

Unten ist ein Beispiel, das Tastatur-Eingang nimmt und jede Eingangslinie als ein Ereignis behandelt. Das Beispiel wird auf die Bibliotheksklassen gebaut und. Wenn eine Schnur von System.in geliefert wird, wird die Methode dann genannt, um alle Beobachter vom Ereignis des Ereignisses, in der Form einer Beschwörung ihrer 'Aktualisierungs'-Methoden - in unserem Beispiel zu benachrichtigen.

Die Datei enthält eine Methode, die verwendet werden könnte, um den Code zu führen.

/* Dateiname: EventSource.java * /

Paket obs;

Import java.util. Erkennbar;//Erkennbar ist hier

Import java.io. BufferedReader;

Import java.io. IOException;

Import java.io. InputStreamReader;

öffentliche Klasse EventSource erweitert Erkennbare Werkzeuge Runnable {\

öffentliche Leere geführt {\

versuchen Sie {\

endgültiger InputStreamReader isr = neuer InputStreamReader (System.in);

endgültiger BufferedReader br = neuer BufferedReader (isr);

während (wahr), {\

Schnur-Antwort = br.readLine ;

setChanged ;

notifyObservers (Antwort);

}\ }\

Fang (IOException e) {\

e.printStackTrace ;

}\ }\}\</Quelle>

/* Dateiname: ResponseHandler.java * /

Paket obs;

Import java.util. Erkennbar;

Import java.util. Beobachter;/* ist das Ereignis-Dressierer * /

öffentliche Klasse ResponseHandler führt Beobachter {\durch

private Schnur resp;

öffentliche leere Aktualisierung (Erkennbarer obj, Gegenstand arg) {\

wenn (arg instanceof Schnur) {\

resp = (Schnur) arg;

System.out.println (" \nReceived Antwort: "+ resp);

}\ }\}\</Quelle>

/* Dateiname: MyApp.java * /

/* Das ist das Hauptprogramm * /

Paket obs;

öffentliche Klasse MyApp {\

öffentliche statische leere Hauptsache (Spannen args []), {\

System.out.println ("Gehen in Text>" Ein);

//schaffen Sie eine Ereignis-Quelle - liest von stdin

endgültiger EventSource evSrc = neuer EventSource ;

//schaffen Sie einen Beobachter

endgültiger ResponseHandler respHandler = neuer ResponseHandler ;

//unterzeichnen Sie den Beobachter zur Ereignis-Quelle

evSrc.addObserver (respHandler);

//fängt den Ereignis-Faden an

Faden-Faden = neuer Faden (evSrc);

thread.start ;

}\}\</Quelle>

Durchführungen

Das Beobachter-Muster wird in zahlreichen Programmierbibliotheken und Systemen einschließlich fast aller GUI Werkzeuge durchgeführt.

Einige der bemerkenswertesten Durchführungen dieses Musters:

ActionScript

  • flash.events, ein Paket in ActionScript 3.0 (das Folgen aus dem mx.events Paket in ActionScript 2.0).

C

  • GObject, im Zungenfertigen - eine Durchführung von Gegenständen und Signalen/Rückrufaktionen in C. (Hat diese Bibliothek viele bindings in andere Programmiersprachen.)

C ++

  • libsigc ++ - der C ++ Signalschablone-Bibliothek.
  • sigslot - C ++ Bibliothek des Signals/Ablagefaches
  • Cpp:: Ereignisse - Schablone-basierter C ++ Durchführung, die Trennung der Verbindungsverwaltungsschnittstelle des Ereignis-Gegenstands von der Beschwörungsschnittstelle einführt.
  • XLObject - Schablone-basierte C ++ geben nach Qt gestaltetem Modell Zeichen/einstecken.
  • Signale - Ein leichter und nichtaufdringlicher C ++ gibt Musterdurchführung Zeichen/einsteckt.
  • libevent - Mehreingefädeltes Crossplatform Signal/Ablagefach C ++ Bibliothek
  • Zunahme. Signale, eine Durchführung des Modells des Signals/Ablagefaches
  • Der CDocument-CView-framework von MFC
  • Der Qt C ++ das Modell des Signals/Ablagefaches des Fachwerks
  • Die teilbasierte Muster-Durchführung des Modells/Beobachters des Fortgeschrittenen Teilfachwerks.
  • Die MRPT Robotertechnik C ++ der Beobachter des Fachwerks vorbildlich / erkennbar vorbildlich.

Ziel-C

C#

ColdFusion

http://www.cfdesignpatterns.com/behavioral-patterns/observer-design-pattern-in-coldfusion/ http://coldfusioneventmanager.riaforge.org/

Delphi

Java

  • Die Klasse stellt eine einfache Beobachter-Durchführung zur Verfügung.
  • Ereignisse werden normalerweise in Java durch das Rückrufaktionsmuster durchgeführt: Ein Stück des Codes stellt eine allgemeine Schnittstelle mit so vielen Methoden zur Verfügung, wie viele Ereignisse erforderlich sind, stellt ein anderes Stück des Codes eine Durchführung dieser Schnittstelle zur Verfügung, und ein anderer erhält diese Durchführung, und erhebt Ereignisse als notwendig.

JavaScript

  • Singleton von EventDispatcher, eine Kern-API von JavaScript hat Signal- und Ablagefach-Durchführung gestützt - ein Beobachter-Konzept, das davon verschieden ist, Veröffentlicht - hübscher lightweighted, aber noch das Erzwingen der Typ-Sicherheit/unterzeichnet.
  • DevShop DevShop Js ist ein im Taschenformat Minimalist-Fachwerk von allgemeinen Designmustern für JavaScript. Schließt Beobachter-Muster ein.
  • Das Beobachter-Muster wird in jQuery durchgeführt, der '.on verwendet ' '.trigger ' und 'von ', um zu schaffen, entlassen Sie und entfernen Sie Ereignis-Dressierer. jQuery verwendet die wirklichen DOM Elemente im Gedächtnis durch die Befestigung von Ereignis-Dressierern ihnen, und automatisch das Entfernen der Ereignisse, wenn ein Element vom DOM verschwindet. Sieh diesen jQuery Ereignis-Musterlichtbildervortrag für mehr Info.

Lispeln

  • Zellen, eine dataflow Erweiterung auf das Allgemeine Lispeln, das Meta-Programmierung verwendet, um einige der Details der Beobachter-Muster-Durchführung zu verbergen.

Perl

PHP

Pythonschlange

Rubin

  • Beobachter, von der rubinroten Standardbibliothek.

Other/Misc

Kritiker

Das Beobachter-Muster wird dafür kritisiert, zu wortreich zu sein, zu viele Programmfehler vorstellend und Softwaretechnikgrundsätze, wie nicht Förderung von Nebenwirkungen, encapsulation, composability, Trennung von Konzepten, Skalierbarkeit, Gleichförmigkeit, Abstraktion, Quellenmanagement, semantischer Entfernung verletzend. Die empfohlene Annäherung soll Beobachter für reaktive Programmierabstraktionen allmählich missbilligen.

Siehe auch

  • Designmuster (Buch), das Buch, das die Studie von Designmustern in der Informatik verursacht
hat Designmuster (Informatik), eine Standardlösung von häufigen Problemen im Softwaredesign

Links


Vermittler-Muster / Staatsmuster
Impressum & Datenschutz