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