Das Observer Pattern wird angewendet, wenn ein oder mehrere Objekte über eine Veränderung eines anderen Objektes informiert werden sollen, ohne das diese direkt gekoppelt sind.
Das Observer-Pattern kann auf unterschiedliche Weise umgesetzt werden. Nachfolgend folgt ein Klassendiagramm des Observer-Patterns, wie es z.B. auch in der Java Swing/AWT Programmierung zum Einsatz kommt.
Nachfolgend soll das Observer-Pattern an einem Beispiel verdeutlicht werden. In diesem Beispiel kommen keine, für das Observer-Pattern, vorgefertigte Bestandteile des SDKs zum Einsatz. Als Basisklasse für den konkreten Beobachter kommt eine nicht abstrakte Basisklasse zum Einsatz, was im Gegensatz obigen Klassendiagramm steht und im nachfolgenden Klassendiagramm dargestellt wird.
Zunächst der Quelltext des Interfaces Bobachtend
. Klassen,
die dieses Interface implementieren, können sich bei Klassen,
die vom Typ Beobachtbar
sind, als beobachtend registrieren.
public interface Beobachtend { public void benachrichtigung(); }
Als nächstes folgt der Quelltext der Klasse Beobachtbar
. Klassen,
die diese Klasse erweitern, schaffen die Möglichkeit, das Klassen
des Typs Beobachtend
an- und abgemeldet werden können und bei
entsprechenden Änderungen in der abgeleiteten Klassen darüber informiert
werden.
import java.util.*; public class Beobachtbar { private HashSet<Beobachtend> beobachtendSet; public Beobachtbar(){ beobachtendSet = new HashSet<Beobachtend>(); } public void anmelden(Beobachtend beobachtend){ beobachtendSet.add(beobachtend); } public void abmelden(Beobachtend beobachtend){ beobachtendSet.remove(beobachtend); } protected void benachrichtigen(){ for (Beobachtend beobachtend : beobachtendSet){ beobachtend.benachrichtigung(); } } }
Objekte der nachfolgenden Klasse KonkretBeobachtbar
benachrichtigen alle registrierten Objekte des Typs Beobachtend
bei entsprechender Veränderung.
Benachrichtigt werden die registrierten Objekte, über die Methode
benachrichtingung()
der Vaterklasse Beobachtbar
.
public class KonkretBeobachtbar extends Beobachtbar{ public void doSomething(){ // some internal action } public void foo(){ // some internal action benachrichtigen(); } }
Die nachfolgende Klasse KonkretBeobachtend
implementiert
das Interface Beobachtend
und kann so sich
bei einem Objekt des Typs Beobachtbar
als beobachtend registrieren.
public class KonkretBeobachtend implements Beobachtend{ public void benachrichtigung(){ // some internal action } public void foo(){ // some internal action } }
de.wikipedia.org
Observer (Beobachter)
http://de.wikipedia.org/wiki/Beobachter_(Entwurfsmuster)
Stefan Bünnig
http://wwwswt.informatik.uni-rostock.de
Beobachter
http://wwwswt.informatik.uni-rostock.de/deutsch/Infothek/Entwurfsmuster/patterns/Observer/index.html
theserverside.de
Singleton Pattern in Java
http://www.theserverside.de/singleton-pattern-in-java/
IT-ACADEMY.CC
Entwurfsmuster: Observer
http://www.it-academy.cc/article/1517/Entwurfsmuster:+Observer.html