Erstmal mußt du entscheiden was führend ist und der Großteil der Referenzen sollte dann in Modus sein.
1: Interface mit Referenzzählung und wenn nötig, dann wird daraus "kurzzeitig" eine Objektreferenz geholt (z.B. TInterfacedObject)
2: Objekt ohne Referenzzählung ist führend und man kann daraus kurzzeitig Interfacereferenzen holen (z.B. TInterfacedPersistent)
Ein Beispiel für 2 ist die
VCL, da kannst du jedes TComponent nach einem Interface fragen und so gleiche Funktionalität in unterschiedliche Klassen (auch nachträglich) einbauen.
PS: Etwas neuere Delphis können auch
MyIntf as TMyObject
, da dort ein virtuelles Interface in TObject steckt, was "intern" per Supports statt einer Interfacereferenz die Objektreferenz raus holt, ohne das man selber ein GetMyObject (Result := Self) bauen muß.
PPS: Unter ARC hat Delphi Interfaces und Objekte vermanscht.
Beides ist "immer" referenzgezählt (außer bei
var [Weak] Variable: xxx;
) und nutzt eine gemeinsame Zählung.