Das hört sich so an als seinen wie schon erwähnt Interfaces für dich die ideale Lösung.
Da du die Referenzzählung wohl kaum verwenden möchtest, kannst du die obersten Klassen einfach von TSingletonImplementation ableiten.
Delphi-Quellcode:
uses
System.Generics.Defaults;
type
IExample = interface
['{8634FA7C-AA68-43B9-BEDA-2A64E3467F5C}']
property Text...
end;
TExampleClass = class(TSingletonImplementation, IExample)
property Text...
end;
if Supports(lObject, IExample, Example) then
Example.Text := NewText;