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;
Und damit bist du natürlich sehr viel schneller, weil du viel weniger Aufwand betreiben mußt, nicht wahr?