Wenn beim Erzeugen des Objektes zusätzliche Methoden oder Properties angesprochen werden, braucht man dafür eigentlich kein zweites Interface.
Man muss nur klar abgrenzen, bis wo ohne Referenzzählung mit dem Objekt gearbeitet wird. Danach sollte das Objekt nicht mehr direkt referenziert werden.
Delphi-Quellcode:
type
IFooItem = Interface
['{9995E78E-45DF-4C25-B657-7396738FEA70}']
procedure Foo(const AValue);
end;
TFooItem = class(TinterfacedObject, IFooItem)
public
procedure Bar;
procedure Foo(const AValue);
end;
TFooOwner = class
private
FItem: IFooItem
function CreateItem: TFooItem;
function GetItem: IFooItem;
public
property Item: IFooItem GetItem;
end;
implementation
function TFooOwner.CreateItem: TFooItem;
begin
Result := TFooItem.Create;
Result.Bar;
end;
function TFooOwner.GetItem: IFooItem;
begin
if not Assigned(FItem) then
FItem := CreateItem; // Referenzzählung beginnt
Result := FItem;
end;