AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interfaces und Listen (Observer Pattern)

Ein Thema von Zwoetzen · begonnen am 13. Feb 2009 · letzter Beitrag vom 16. Feb 2009
 
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#1

Interfaces und Listen (Observer Pattern)

  Alt 13. Feb 2009, 20:09
Hi DP'ler

folgende Situation:
In meinem Programm habe ich eine gewisse Speicherstruktur. Später möchte ich diese Struktur auch graphisch darstellen, sodass ich auf Änderungen innerhalb der Struktur reagieren muss. Kürzlich habe ich etwas über das Observer Pattern in einer Vorlesung gehört (lohnt sich doch, anwesend zu sein ), und wollte dies nun verwenden.

Das ganze soll dabei auch mit Interfaces erstellt werden... Einfach weil ich noch nie damit gearbeitet habe ^^ Und da ist das Problem: Ich weiß nicht so recht, wie ich das anstellen muss.

Also am besten erstmal einen Happen Code:

Typdeklarationen:
Delphi-Quellcode:
type
  // Das Observer-Interface
  IObserver = interface
    procedure Update; // Reicht vorerst
  end;

  // Zwei Observer-Klassen, die dieses Interface implementieren, und die später dann bei Änderungen angeschupst werden sollen
  // (Implementieren eben das Interface)
  TObserver = class(TInterfacedObject, IObserver)
    procedure Update;
  end;
  TObserver2 = class(TInterfacedObject, IObserver)
    procedure Update;
  end;

  // Klasse des zu beobachtenden Objektes
  TSubject = class
  strict private
    FObservers: TList; // Liste der "registrierten" Observer
    FValue: String;
    procedure SetValue(const Value: String);
  public
    // Ein Test Value, der bei Änderung die Observer benachrichtigen soll
    property Value: String read FValue write SetValue;

    procedure Attach(O: IObserver);
    procedure Detach(O: IObserver);
    constructor Create;
    destructor Destroy; override;
  end;

var
  GSubject: TSubject;
Und noch ein Happen von den Promblemstellen in der Implementierung von TSubject:
Delphi-Quellcode:
procedure TSubject.Attach(O: IObserver);
begin
  FObservers.Add(O); //<--- ??? Was muss hier hin?
end;

procedure TSubject.Detach(O: IObserver);
begin
  FObservers.Remove(O); //<-- ??? Was muss hier hin?
end;

// Das benachrichtigen der Observer findet noch direkt im Setter statt,
// wird später natürlich ausgelagert und von jedem Setter aufgerufen
procedure TSubject.SetValue(const Value: String);
var
  I: Integer;
begin
  if FValue <> Value then begin
    FValue := Value;
    Form1.Memo1.Lines.Add('Value changed.');

    // Observer updaten
    for I := 0 to FObservers.Count - 1 do
      (FObservers[I] as IObserver).Update; //<-- ??? Und wie muss diese Zeile aussehen?
  end;
end;
Die Stellen, wo ich Probleme hab, sind auch im Quelltext markiert:
  • Wie füge ich die Observer zur Liste hinzu bzw. wie entferne ich sie wieder? (Attach() und Detach())
  • Wie rufe ich beim Durchlauf durch die Liste die Update-Methode der Observer auf?
  • Die obligatorische Frage: Ist diese Vorgehensweise richtig so oder sollte ich etwas anders machen? ^^

Würde mich freuen, wenn mir jemand helfen kann

MfG Zwoetzen
  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 22:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz