AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Design Paddern Singelton - Oder wie verstecke ich Create?
Thema durchsuchen
Ansicht
Themen-Optionen

Design Paddern Singelton - Oder wie verstecke ich Create?

Ein Thema von Highttower · begonnen am 19. Aug 2009 · letzter Beitrag vom 19. Aug 2009
Antwort Antwort
Highttower

Registriert seit: 2. Jun 2009
Ort: Worms
88 Beiträge
 
Delphi 2010 Professional
 
#1

Design Paddern Singelton - Oder wie verstecke ich Create?

  Alt 19. Aug 2009, 08:06
Hallo zusammen,

ich suche eine schöne Lösung für das DP der GOF Singelton, in Java und C++ würde ich ganz einfach den Konstruktor Private machen und das Objekt über eine FactoryMethode CreateInstance erzeugen lassen, da ich aber in Delphi es einfach nicht bekomme Create richtig zu verstecken, stehe ich grad auf dem Schlauch wie ich das Richtig mache, oder ist einfach nur der Ansatz Create zu verstecken falsch?

Wäre nett wenn mir jemand helfen könnte,

Tobi
Tobi
Rechtschreib und Semikolion Fehler dürfen behalten werden.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Design Paddern Singelton - Oder wie verstecke ich Create

  Alt 19. Aug 2009, 08:14
Hallo,

so.

Delphi-Quellcode:
unit Bla;

function CreateClass: TMyClass;

interface

implementation

var
  FMyClass: TMyClass;
  bWasCreated: Boolean;

function CreateClass: TMyClass;
begin
  if not bWasCreated then
  begin
    FMyClass:= TMyClass.Create;
    bWasCreated:= True;
  end;
  Result:= FMyClass;
end;

// Initialisierung muss nicht sein, macht Delphi selber (?)
begin
  FMyClass := NIL;
  bWasCreated := False;
end;
Aufruf erfolgt per CreateClass und zwar sooft du willst.
Es gibt auch den Ansatz, einfach per <>NIL zu prüfen, der gefällt mir aber nicht so.


Heiko
Heiko
  Mit Zitat antworten Zitat
TheFrog

Registriert seit: 24. Mär 2009
145 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Design Paddern Singelton - Oder wie verstecke ich Create

  Alt 19. Aug 2009, 08:18
Hallo Tobi,

im Modelmaker kann ich bestimmte Pattern auf Klassen anwenden, u.a. das Singleton-Pattern, welches folgendermassen implemetiert wird:
Delphi-Quellcode:
unit Singleton;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;

type
  TSingleton = class(TObject)
  protected
    constructor CreateInstance;
    class function AccessInstance(Request: Integer): TSingleton;
  public
    constructor Create;
    destructor Destroy; override;
    class function Instance: TSingleton;
    class procedure ReleaseInstance;
  end;


implementation

{
********************************** TSingleton **********************************
}

constructor TSingleton.Create;
begin
  inherited Create;
  raise Exception.CreateFmt('Access class %s through Instance only',
      [ClassName]);
end;

constructor TSingleton.CreateInstance;
begin
  inherited Create;
end;

destructor TSingleton.Destroy;
begin
  if AccessInstance(0) = Self then AccessInstance(2);
  inherited Destroy;
end;

class function TSingleton.AccessInstance(Request: Integer): TSingleton;

  {$WRITEABLECONST ON}
  const FInstance: TSingleton = nil;
  {$WRITEABLECONST OFF}

begin
  case Request of
    0 : ;
    1 : if not Assigned(FInstance) then FInstance := CreateInstance;
    2 : FInstance := nil;
  else
    raise Exception.CreateFmt('Illegal request %d in AccessInstance',
        [Request]);
  end;
  Result := FInstance;
end;

class function TSingleton.Instance: TSingleton;
begin
  Result := AccessInstance(1);
end;

class procedure TSingleton.ReleaseInstance;
begin
  AccessInstance(0).Free;
end;



end.
Ich arbeite immer mit diesem Ansatz und finde es klappt recht gut.

Hans.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:36 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