Das kann man auch schön so umsetzen
Delphi-Quellcode:
IMyMethod = interface
procedure Execute( input1: Integer; input2: TSomeClass; out output: Double );
end;
// Eine Dummy-Klasse zum Veranschaulichen
TMyDummyMethod = class( TInterfacedObject, IMyMethod )
protected
procedure Execute( input1: Integer; input2: TSomeClass; out output: Double );
end;
procedure TMyMethod.Execute( input1: Integer; input2: TSomeClass; out output: Double );
begin
output := 0;
end;
Jetzt für jeden konkreten Befehl so eine Klasse erstellen und die jeweilige Instanz in einem
TDictionary<string,IMyMethod>
verwalten
Der Aufruf gestaltet sich ja dann sehr smart
Delphi-Quellcode:
type
TPacketHandler = class
private
fMethodDict : TDictionary<string,IMyMethod>;
public
procedure Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double );
procedure AddMethod( const ACommandStr : string; AMethod : IMyMethod );
end;
procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double );
begin
fMethodDict[ACommandStr].Execute( input1, input2, output );
end;
procedure TPacketHandler.AddMethod( const ACommandStr : string; AMethod : IMyMethod );
begin
fMethodDict.AddOrSet( ACommandStr, AMethod );
end;
Man kann das auch mit einem
Chain-Of-Responsibility-Pattern lösen, aber für meinen Geschmack nehme ich lieber ein Dictionary
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)