observer pattern dependents, publish-subscribe, listener dirk...
Post on 05-Apr-2015
118 Views
Preview:
TRANSCRIPT
Observer Pattern
Dependents, Publish-Subscribe, Listener
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Problemdefinition
Falls mehrere Objekte von einander abhängig sind und eines dieser Objekte geändert wird, sollen alle davon abhängigen über die Änderung informiert werden.
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
1 zu n Beziehung (keine Begrenzung der abhängigen Objekte)
Lösung
Sehr enge Kopplung zwischen dem Objekt und seinen Observern
wenig flexibel, kaum wiederverwendbar z.B. wenn ein neuer Observer (Listener) hinzugefügt werden soll
Trennung der Beteiligten voneinander
Observer muss von Änderungen erfahren
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Beispiel (Ausgangssituation)
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Beispiel (nach Veränderung)
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Anwendungsmöglichkeiten
Wenn bei einer Änderung eines Objektes andere Objekte geändert werden müssen, man aber nicht weiß, wie viele Objekte dies sind.
Wenn ein Objekt in der Lage sein soll andere Objekte zu benachrichtigen, ohne zu wissen, welche diese sind. (Vermeidung einer engen Kopplung zwischen Objekten)
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Strukturdiagramm
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Beteiligte Objekte
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Methoden im Detail
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Interaktion der Elemente
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
CodebeispielObservable
+setValue()+getValue() : Integer
ExcelTabelle
Observer
KuchenDiagramm SäulenDiagramm
Class ExcelTabelle extends Observable{
private int value;
public void setValue (int newValue){
value = newValue;setChanged();notifyObservers(value);
}
public int getValue (){
return value;}
}
class KuchenDiagramm extends Observer{
public void update (Observable o, Object newValue){
//Update des Diagramms…
}}
class SäulenDiagramm extends Observer{
public void update (Observable o, Object newValue){
//Update des Diagramms…
}}
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Vorteile
Das Observer-Pattern ermöglicht es Subjekte und Observer getrennt zu behandeln (z.B. auszutauschen)
abstrakte Kopplung zwischen Subjekt und Observer: Ein Subjekt weiß nur, welche Observer bei ihm registriert sind, kennt also deren konkrete Subklassen nicht.
Unterstützung von Broadcast-Kommunikation: die Anzahl der zu benachrichtigenden Observer durch das Subjekt ist beliebig. Daher können Observer zu jeder Zeit hinzugefügt oder abgemeldet werden.
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Nachteile
Unerwartete Updates: Da die Observer nicht gegenseitig ihrer Existenz bewußt sind, können unerwünschte Effekte auftreten. Beispielsweise kann die durch einen Observer ausgelöste Änderung zu einer aufwendigen Kaskasde von Änderungen in den anderen Observern führen
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Active Observers ( Pull-Observers, Voyeur Patterns)
Das Subjekt informiert den Observer lediglich über eine Veränderung.
Der Observer fragt nun seinerseits bei dem Subjekt nach, welche Veränderung durchgeführt wurde und holt sich die für ihn notwendigen Änderungen ab
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Passive Observers ( Push-Observers)
Das Subjekt informiert alle Observer detailliert über die durchgeführten Änderungen.
Alle Informationen werden übergeben, egal ob der Observer sie verwerten kann oder nicht.
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Change Manager
Bildet die Schnittstelle zwischen Subjekt und Observer
Er definiert Update-Strategien Er aktuallisiert alle Observer auf den Wunsch
eines Subjektes
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
Die Interaktionen zwischen Subjekt und
Observer können durchaus sehr komplex sein.
Literatur
„Design Patterns“ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Technische Hochschule Zürich Uni Weimar
Dirk Winterling dw08@hdm-stuttgart.deMarco Zugelder mz10@hdm-stuttgart.de
top related