Очень простой шаблон проектирования, который подразумевает, что объект определённого класса в программе будет в единственном экземпляре.
Его преимущество в том, что объект такого класса не нужно инициализировать и использовать переменную (явно) для доступа к нему. Хотя, желательно уничтожить перед завершением программы (но не так страшно, если даже и не уничтожим).
Давайте рассмотрим простой пример такого класса:
type
TSingletonClass = class
private
class var
Instance: TSingletonClass;
public
class function GetInstance: TSingletonClass;
class procedure DestroyInstance;
procedure DoSomething;
end;
...
{ TSingletonClass }
procedure TSingletonClass.DoSomething;
begin
ShowMessage('Hi');
end;
class procedure TSingletonClass.DestroyInstance;
begin
if Assigned(Instance) then
Instance.Free;
end;
class function TSingletonClass.GetInstance: TSingletonClass;
begin
if not Assigned(Instance) then
Instance := TSingletonClass.Create;
Result := Instance;
end;
Постоянных и основных всего два метода: GetInstance и DestroyInstance. Первый метод предоставляет доступ к методам класса, а второй позволяет безопасно уничтожить синглтон. Теоретически, последний метод не обязателен, т.к. объект класса всегда будет один и утечек памяти на стадии работы программы быть не может. Утечка произойдёт только после закрытия программы, когда самой программе это уже не важно. Но не забываем про правила хорошего тона.
Я показал как выглядит синглтон, но так и не показал, как его используют и в чем его преимущество. Хотя, многие уже наверно догадались.
procedure TForm1.Button1Click(Sender: TObject);
begin
TSingletonClass.GetInstance.DoSomething;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Уничтожение, если был использован синглтон
TSingletonClass.DestroyInstance;
end;
Это весь код. До этого не был инициализирован объект и мы видим, что обращаемся к не классовому методу DoSomething через класс.
Преимущество синглтона в том, что объект может быть и вовсе не создан, если к нему не произошло обращений. Следовательно и память была не выделена. Таким способом, мы можем обращаться к объекту в любой момент времени из любого места программы, не заботясь о том, был ли создан объект или нет. В целом, это всё.
Всем хорошего кода)

7 комментариев
tadalafil 20mg
tadalafil 20mg
doryx 70 mg
doryx 70 mg
sertraline hydrochloride 50 mg
sertraline hydrochloride 50 mg
metoprolol tartrate 25 mg tablet
metoprolol tartrate 25 mg tablet
vidalista 60 mg tablets
vidalista 60 mg tablets
semaglutide injectie schema
semaglutide injectie schema
semaglutid receptfritt tabletter apoteket
semaglutid receptfritt tabletter apoteket