Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Schon wieder: Warum Interfaces

  Alt 20. Okt 2016, 10:50
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.
  Mit Zitat antworten Zitat