• Keine Ergebnisse gefunden

Observer / Beobachter

N/A
N/A
Protected

Academic year: 2022

Aktie "Observer / Beobachter"

Copied!
12
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Observer / Beobachter

Design Pattern & Refactoring - Julian Hirt

(2)

Motivation

• System aus interagierenden Klassen

• Konsistenz

• Keine enge Kopplung

(3)

Beispiel

A = 20

B = 17

C = 4

(4)

Beispiel

A = 20 B = 17

C = 4 Benachrichtigen Anfragen

Beobachter

Subjekt

(5)

Anwendbarkeit

• Abstraktion mit zwei Aspekten

• Änderung eines Objekts verlangt Änderung eines anderen Objekts

• Objekt soll andere Objekte benachrichtigen

(6)

Struktur

(7)

Konsequenzen

• Abstrakte Kopplung zwischen Subjekt und Beobachter

• keine enge Kopplung

• Schichtenkonzept wird nicht verletzt

• Unterstützung von Broadcast-Kommunikation

• Unerwartete Aktualisierungen

(8)

Beispielimplementierung in PHP5 - I

interface Subject{

public function register_observer(Observer $observer);

public function remove_observer(Observer $observer);

public function notify();

}

class MySubject implements Subject{

private $observers = array();

private $value;

public function register_observer(Observer $observer){

$this->observers[] = $observer;

}

public function remove_observer(Observer $observer){

$offset = array_search($observer, $this->observers);

$this->observers = array_splice($this->observers, $offset, 1);

}

public function notify(){

foreach($this->observers as $observer) {

$observer->update($this->value);

} }

public function setValue($value){

$this->value = $value;

$this->notify();

} }

(9)

Beispielimplementierung in PHP5 - II

interface Observer{

public function update($value);

}

class MyObserver1 implements Observer {

public function __construct(Subject $subject){

$subject->register_observer($this);

}

public function update($value){

print "I'm observer 1 and value is ".$value."\n";

} }

class MyObserver2 implements Observer {

public function __construct(Subject $subject){

$subject->register_observer($this);

}

public function update($value){

print "I'm observer 2 and value is ".$value."\n";

} }

$mySubject = new MySubject();

$myObserver1 = new MyObserver1($mySubject);

$myObserver2 = new MyObserver2($mySubject);

(10)

Beispielimplementierung in JAVA

public class ObserverAnwendung {

public static void main(String[] args) { Subjekt s = new Subjekt();

Beobachter b = new Beobachter();

s.addObserver(b);

s.setValue("Observer Test");

} }

import java.util.Observable;

public class Subjekt extends Observable { private String value;

public void setValue(String s) { this.value = s;

setChanged();

notifyObservers(this.value);

} }

import java.util.Observer;

import java.util.Observable;

class Beobachter implements Observer {

public void update(Observable o, Object str) {

System.out.println("update: " + str.toString());

} }

(11)

Implementierung

• Abbildung von Subjekten auf ihre Beobachter

• Beobachten von mehr als einem Subjekt

• Auslösen der Aktualisierung

• Fehlerhafte Referenzen auf gelöschte Subjekte

• Sicherstellen, dass der Subjektzustand vor der Benachrichtigung konsistent ist

• Push/Pull Modell

• Explizites Festlegen der interessierenden Änderungen

(12)

Bekannte Verwendungen / Verwandte Muster

• MVC-Konzept

• Bibliotheken für Benutzungsschnittellen (InterViews, UniDraw, u.v.a.)

• Verwandte Muster:

• Vermittler

• Singleton

Referenzen

ÄHNLICHE DOKUMENTE

den Vorschlag für die Entschädigungen der unabhängigen Mitglieder der Kommission und der Komitees zuhanden des UVEK.. Er entscheidet über dringende Geschäfte, die nicht

3.1 Im Rahmen der Konformitätsbewertung werden die energieverbrauchsrele- vanten Eigenschaften der Haushaltsgeschirrspüler nach Ziffer 1 anhand der Vorgaben und

Wenn gleichzeitig mit dem Bau oder der Erweiterung der Anlage ein Fernwärmenetz oder eine andere Einrichtung für die Nutzung der Wärme errichtet oder erweitert

2 Hat die Herstellerin weder eine Niederlassung in der Schweiz noch eine bevollmäch- tigte Person bezeichnet und gibt es keine Importeurin, so müssen auf dem Niederspan-

2bis Hat die Herstellerin weder eine Niederlassung in der Schweiz noch eine bevoll- mächtigte Person bezeichnet und gibt es keine Importeurin, so müssen auf dem Pro- dukt oder,

Auch die Architektur ist Lacan zufolge etwas, das sich zunächst um eine Leere herum organisiert und daher auch symbolisch operiert.. 7 Dem Symbolischen gegenüber setzt Lacan

Falls in unserem Beispiel die Kaufverträge für 8 der 12 Eigentumswohnungen vor Baubeginn verurkundet wurden, so bedeu- tet dies, dass die Verkaufspreise (ohne Wert des Bodens)

stellen eines Rot oder eines anderen Objekts aus dem Kreise der dem Objekt Rot erscheinungsähnlichen Objekte, verbunden mit dem Denken, das mir hier zufällig als