И вы можете вызвать исключение в случае, если кто-то попытается создать его с помощью обычного .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? Это может быть просто и изящно и потокобезопасно?

Спасибо.

Ответы на вопрос(0)

Ваш ответ на вопрос