Einzelnen Beitrag anzeigen

jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#26

AW: Problem mit Klassendesign

  Alt 8. Feb 2017, 14:46
Hallo,

mich fasziniert die Lösung von DeddyH. Da ich in Delphi2007 den Code von DeddyH nicht kompilieren kann, habe ich mal folgendes mit Hilfe von Codeschnipsel aus dem Internet zusammengeschustert:

Delphi-Quellcode:
unit TierIntf;

interface

type
  ITier = interface
    ['{9DC595F6-9026-4C4B-9FAC-5CCC5437C8A5}']
    procedure GibLaut;
  end;

implementation

end.
Delphi-Quellcode:
unit TierFactory;

interface

uses Classes,TierIntf;

type
  TTier = class(TInterfacedPersistent, ITier)
  public
    class function CreateInstance(Name: string): TTier; overload;
    procedure GibLaut; virtual; abstract;
  end;

implementation

{ TTier }

class function TTier.CreateInstance(Name: string): TTier;
var
  AClass: TPersistentClass;
begin
  Result := nil;
  AClass := GetClass(Name);
  if Assigned(AClass) then
  begin
    Result := AClass.NewInstance as TTier;
    Result.Create;
  end
  else
    { error handle }
end;

end.
Delphi-Quellcode:
unit Hund;

interface

uses Dialogs, Classes, TierFactory;

type
  THund = class(TTier)
  public
    procedure GibLaut; override;
  end;

implementation

{ THund }

procedure THund.GibLaut;
begin
  inherited;
  showmessage('Ich bin ein'+ Classname);
end;

initialization
  RegisterClass(THund);

end.
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses TierFactory;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Tier: TTier;
begin
  Tier := TTier.CreateInstance('THund');
  if Assigned(Tier) then
  begin
    Tier.GibLaut;
    Tier.Free;
  end;
end;

end.
Meine Frage an die Experten, ist der obige Code noch Factory konform, oder ist es nur irgendwas?

Lg,
jus

Geändert von jus ( 8. Feb 2017 um 15:10 Uhr)
  Mit Zitat antworten Zitat