И вы можете вызвать исключение в случае, если кто-то попытается создать его с помощью обычного .Create (создайте приватный конструктор CreateSingleton)
ю, что это обсуждается много раз везде в сообществе, но я просто не могу найти красивую и простую реализацию шаблона Singleton в Delphi. У меня есть пример в C #:
public sealed class Singleton {
// Private Constructor
Singleton( ) { }
// Private object instantiated with private constructor
static readonly Singleton instance = new Singleton( );
// Public static property to get the object
public static Singleton UniqueInstance {
get { return instance;}
}
Я знаю, что в Delphi нет такого изящного решения, как это, и я видел много дискуссий о невозможности правильно скрыть конструктор в Delphi (сделать его закрытым), поэтому нам нужно было бы переопределить методы NewInstance и FreeInstrance. Что-то в этом роде, я считаю, это реализация, которую я нашел наhttp://ibeblog.com/?p=65:
type
TTestClass = class
private
class var FInstance: TTestClass;
public
class function GetInstance: TTestClass;
class destructor DestroyClass;
end;
{ TTestClass }
class destructor TTestClass.DestroyClass;
begin
if Assigned(FInstance) then
FInstance.Free;
end;
class function TTestClass.GetInstance: TTestClass;
begin
if not Assigned(FInstance) then
FInstance := TTestClass.Create;
Result := FInstance;
end;
Что бы вы посоветовали в отношении шаблона Singleton? Это может быть просто и изящно и потокобезопасно?
Спасибо.