Такой шаблон, который говорит сам за себя. У класса есть только один экземпляр. Один, совсем один ))
Плюсы исходят также из названия. Мы всегда работаем с единственным экземпляром.
Часто singleton помещают в какой-нибудь uCommon, инициализируют в initialization и уничтожают в finalization.
Популярный пример реализации
unit SingletonUnit;
interface
type
TSingleton = class
private
constructor ActualCreate;
public
constructor Create;
class function GetInstance: TSingleton;
end;
implementation
var
Singleton: TSingleton;
constructor TSingleton.ActualCreate;
begin
inherited Create;
end;
constructor TSingleton.Create;
begin
raise Exception.Create('Attempt to create an instance of TSingleton');
end;
class function TSingleton.GetInstance: TSingleton;
begin
if Singleton = nil then
Singleton := TSingleton.ActualCreate;
Result := Singleton;
end;
end.