Delphi 2006 - Шаблон Singleton (Одиночка)

Існує чимало випадків, коли певний клас у програмі має бути представлений єдиним екземпляром. Наприклад, у бібліотеці Delphi VCL є глобальна зміннаApplication(примірник класуTApplication),що надає доступ до системних характеристик самої програми у процесі виконання. Очевидно, що екземпляр цього класу може бути лише один, а доступ до нього надає глобальна зміннаApplication.Однак теоретично ніщо не заважає розробнику створити новий екземпляр класуTApplication(рис. 7.6).

одиночка

Мал. 7.6. Шаблон Одинак ​​у Дизайнері моделі

Шаблон Одиночка дозволяє створити лише один екземпляр класу, а доступ до нього здійснюється через покажчик - внутрішнє полеFlnstance,до якого можна звертатися через методGet Instance.

TSingleton = claee strict private class var

class function Getlnstance: TSingleton;

Реалізація цього методу прозора — у ній забезпечується постійна робота з єдиним, причому одним і тим самим екземпляром цього класу:

class function TSingleton.GetInstance: TSingleton; begin

If FInstance = nil Then begin

FInstance := TSingleton.Create(); end;

Result := FInstance; end;

При цьому програміст завжди використовує лише даний метод, не розбираючись, чи створювався попередньо даний екземпляр явно - ця перевірка відбувається автоматично.

Зазначимо також, що конструктор прихований у private-розділі класу TSingleton, щоб до нього не можна було отримати доступ, а змінна FInstance описана як змінна класу, що допускає абстрактні операції над класом без явногостворення об'єкта. Така тактика добре підходить для реалізації цього завдання.

Бобровський С. І. Технології Delphi 2006. Нові можливості. - СПб.: Пітер, 2006. - 288 е.: Іл.