AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Programmier-Pattern OBSERVER
Thema durchsuchen
Ansicht
Themen-Optionen

Programmier-Pattern OBSERVER

Ein Thema von Jonas Shinaniganz · begonnen am 12. Nov 2012 · letzter Beitrag vom 12. Nov 2012
 
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

Programmier-Pattern OBSERVER

  Alt 12. Nov 2012, 08:49
Pattern OBSERVER


Hallo,

ich habe mich letzte Woche (nach einem Vortrag von einem Kollegen) hingesetzt und eine Implementation des Observer-Patterns erstellt, die ich hier vorstellen möchte.

Das Observer-Pattern ist dafür da, um eine Beziehung zwischen einem Subjekt und vielen Observern zu beschreiben.

Wenn sich das Subjekt ändert, werden alle Observer auf diese Änderung aufmerksam gemacht.


Beispiel:

(die Forumleser) schauen auf (Jonas)
schauen auf ->

Wenn sich also etwas an meinem Zustand (dem Subjekt-Objekt) verändert, müssen alle, die es intressiert (die Observer-Objekte), davon in Kenntnis gesetzt werden.

Als UML-Diagramm (habe ich aus dem Vortrag entwendet) gibts folgende Darstellung:

http://www.philipphauer.de/study/se/...eitungV-kl.png

In dem Beispiel meiner Impementation gehe ich von einem Verlag (Zeitschriften-Verlag) und seinen Lesern (den Abonnenten) aus. Die Zeitung ist das Objekt, welches ausgetauscht wird.

Das Subjekt ist der Verlag, die Objekte sind alle Abonnenten. Ganz einfach.

Grundsätzlich lässt sich das Observer in 2 Arten implementieren: Die Push-Version und die Pull-Version. Bei der Push-Version gibt die FAZ die Zeitungen an die Abonnenten raus. Bei der Pull-Version fragen die Abonnenten in gewissen zeitlichen Abständen nach, ob denn schon eine neue Zeitung da ist.

Für meine Implementation habe Ich die Push-Version gewählt. (FAZ benachrichtigt Abonnenten)

Abstrakte Grundklassen:
1. Es gibt das ISubscriber - Interface, dass alle Abonnenten kenntlich macht. (Die Observer)
2. Den TPublisher, der die Basis aller Verläge (Subjekte) darstellt.

Konkrete Klassen:
1. Der Verlag TFAZ abgeleitet von TPublisher
2. 3 verschiedene Klassen, welche ISubscriber implementieren. (Familie Fischer, Meier und die Firma XY)

Die Variablen sind konkret folgende:

Delphi-Quellcode:
var
  FAZ : TFAZ; // das Subjekt
  Fischer : TFischer; // einige Objekte
  Meier : TMeier;
  CompanyXY : TCompanyXY;
Wenn die FAZ möchte, kann sie alle Subscribers per FAZ.SendNewspaperToAllSubs; benachrichtigen.

Die FAZ muss auch Abonnenten löschen und hinzufügen können. Dafür gibt es 2 Funktionen. Beispiel: FAZ.AddSubscriber(Fischer); Am besten ist es wenn du dir die Sourcen dazu einmal ansiehst und vielleicht mit dem Debugger nachvollziehst, was genau passiert. Es ist nicht sonderklich kompliziert und gut strukturiert.



Sourcen: Observer.rar



Falls ich etwas unklar erklärt habe könnt Ihr fragen. Fehler meinerseits sind nicht
ausgeschlossen.

Grüße.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!

Geändert von Jonas Shinaniganz (12. Nov 2012 um 13:34 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz