AGB  ·  Datenschutz  ·  Impressum  







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

Viele Objekttypen handlen?

Ein Thema von Treffnix · begonnen am 1. Jul 2005 · letzter Beitrag vom 1. Jul 2005
 
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: Viele Objekttypen handlen?

  Alt 1. Jul 2005, 17:50
Zitat von Dani:
Wenn du eine neuen Nachkommen hinzufügst, muss die GetDeviceClass Methode aktualisiert werden, aber ich sehe auch keinen Weg, das zu vermeiden
Ich schon
Delphi-Quellcode:
uses
   uDevice;

type
   TBaseDings = class
   private
      fDevice: TDevice;
   protected
      class function MatchesDevice(const aDevice: TDevice): Boolean; virtual; abstract;
      class procedure Register;
   public
      property Device: TDevice read fDevice;
      class function CreateMatchingDings(const aDevice: TDevice): TBaseDings;
      constructor Create(const aDevice: TDevice); virtual;
   end;

   TBaseDingsClass = class of TBaseDings;

implementation
uses
   Contnrs;
var
   ClassList : TClassList;

constructor TBaseDings.Create(const aDevice: TDevice);
begin
   fDevice := aDevice;
end;

class function TBaseDings.CreateMatchingDings(const aDevice: TDevice): TBaseDings;
var
   i : Integer;
   BaseDingsClass : TBaseDingsClass;
begin
   result := nil;
   for i := 0 to ClassList.Count - 1 do
   begin
      BaseDingsClass := TBaseDingsClass(ClassList[i]);
      if BaseDingsClass.MatchesDevice(aDevice) then
      begin
         result := BaseDingsClass.Create(aDevice);
         Break;
      end;
   end;
end;

class procedure TBaseDings.Register;
begin
   if ClassList.IndexOf(Self) = -1 then
      ClassList.Add(Self);
end;


initialization
   ClassList := TClassList.Create();
finalization
   ClassList.Free();
end.
und nun für jedes nur noch Gerät sowas:

Delphi-Quellcode:
uses
   uBaseDings,
   uDevice;

type
   TDings1Device = class(TDevice)
      // mööp
   end;


   TDings1 = class(TBaseDings)
   protected
      class function MatchesDevice(const aDevice: TDevice): Boolean; override;
   public
      constructor Create(const aDevice: TDevice); override;

   end;
implementation

{ TDings1 }

constructor TDings1.Create(const aDevice: TDevice);
begin
end;

class function TDings1.MatchesDevice(const aDevice: TDevice): Boolean;
begin
   Result := aDevice is TDings1Device;
end;

initialization
   // In die ClassList registrieren
   TDings1.Register;
end.

Wobei ich in dem Schritt zwichen BaseDings und Dings1 noch die eigentliche Basisklasse setzen würde, die die grundlegende Funktionalität (virtuell) bereitstellt.
  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:27 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-2025 by Thomas Breitkreuz