unit Game.List; interface uses System.Generics.Collections, Game.Base; type TGameList = class(TList) private class var SInstance: TGameList; protected class procedure Finalize; public class function Instance: TGameList; end; implementation uses System.SysUtils; { TGameList } class procedure TGameList.Finalize; begin FreeAndNil(SInstance); end; class function TGameList.Instance: TGameList; begin if not Assigned(SInstance) then SInstance := TGameList.Create; Result := SInstance; end; initialization finalization TGameList.Finalize; end.