понедельник, 16 апреля 2012 г.

Одиночка (Singleton)

Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.

Плюсы
  • контролируемый доступ к единственному экземпляру
  • уменьшение числа имен
  • допускает уточнение операций и представления
  • допускает переменное число экземпляров
  • большая гибкость, чем у операций класса

  • Минусы
  • глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию не масштабируемого проекта
  • усложняет написание модульных тестов и следованию TDD

  • Применение
  • должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам
  • единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметь возможность работать с расширенным экземпляром без модификации своего кода
  • type
      TSingleton = class
      strict private
        class var
          Instance: TSingleton;
      public
        class function NewInstance: TObject; override;
      end;
    
    class function TSingleton.NewInstance: TObject;
    begin
      if not Assigned(Instance) then
        Instance := TSingleton(inherited NewInstance);
      NewInstance := Instance;
    end;
    

    Комментариев нет:

    Отправить комментарий