[...] dass die Instanz nur als Interface und nicht als konkretes Objekt gespeichert werden darf [...]
Das kannst Du recht effektiv verhindern, indem Du den Objektkonstruktor durch eine Klassenfunktion verdeckst:
Delphi-Quellcode:
class function Create: IMyInterface;
[...]
Damit bekommt niemand mehr Zugriff auf die eigentliche Objektinstanz (außer bei einem Cast
IInterface as TObject
) und damit den Destruktor.