Ich sehe aktuell wie bereits geschrieben den Vorteil in Interfaces, wenn man DLLs programmieren will um seinen Code irgendwie auszulagern. Dann haben die Dinger extreme Vorteile.
Ein anderer Punkt an dem man Interfaces verwenden kann ist eben dann, wenn man 2 unterschiedliche Klassen hat, die aber die gleichen Informationen zur Anzeige auf der
GUI zur Verfügung stellen sollen. Jede Klasse verarbeitet die Informationen allerdings anders und daher ist auch das angezeigte Ergebnis ein anderes. Die Abfrage im Programm bleibt aber immer gleich.
Delphi-Quellcode:
ITest = interface
function GetValue: string;
end;
Delphi-Quellcode:
TMyClass1 = class(TInterfacedObject, ITest)
function GetValue: string;
end;
implementation
function TMyClass1.GetValue: string;
begin
Result := 'Das ist der Wert aus MyClass1';
end;
Delphi-Quellcode:
TMyClass2 = class(TInterfacedObject, ITest)
function GetValue: string;
end;
implementation
function TMyClass2.GetValue: string;
begin
Result := 'Das ist der Wert aus MyClass2';
end;
Delphi-Quellcode:
TForm1 = class(TForm)
procedure ShowValue(FromInterface: ITest);
end;
implementation
function TForm1.ShowValue(FromInterface: ITest);
begin
Label1.Caption := FromInterface.GetValue;
end;
Hier habe ich jetzt den Vorteil, dass ich einfach eine beliebige Interface Instanz übergeben bekomme aus der ich mir dann
mit dem gleichen Aufruf die benötigten Informationen ziehen kann. Das würde bei Klassen zwar auch gehen, aber dafür müssten alle übergebenen Klassen von der gleichen Basisklasse abgeleitet werden. Diese müsste wiederum eine abstrakte Methode GetValue zur Verfügung stellen, welche von jeder Ableitung implementiert werden muss. In diesem Fall sind Interfaces deutlich leichter zu handlen.
Wenn man allerdings nur eine Klasse hat welche Informationen zur Verfügung stellen soll, dann lohnt sich ein Interface meines Erachtens nicht wirklich. Man hat nur den Vorteil den Mavarik angesprochen hat. Diese try..finally Blöcke und das Object.Free fallen weg. Wenn man die Interface Instanzen dann korrekt verwendet, dann sollte man auch kein Problem mit der Referenzzählung haben.