Skip to content

Instantly share code, notes, and snippets.

@arturlector
Last active March 7, 2016 14:55
Show Gist options
  • Save arturlector/9eea0fa48405f36e592d to your computer and use it in GitHub Desktop.
Save arturlector/9eea0fa48405f36e592d to your computer and use it in GitHub Desktop.
Назовите основные отличия синглтона от статического класса, и когда следует использовать один, а когда другой?

Назовите основные отличия синглтона от статического класса, и когда следует использовать один, а когда другой?

https://habrahabr.ru/post/103681/

Использование синглотона оправдано, когда:

  • Необходимо наследование классов или интерфейсов или делегаровать конструирование объектов фабрике
  • Необходимо использование экземпляров класса
  • Необходимо контролировать время жизни объекта (хоть это и очень редкая задача для синглтона)
  • Необходимо сериализовать объект (такая задача гипотетически возможна, но трудно представить себе сценарии использования)

Использование статических классов целесообразно тогда,

  • когда у вас нет необходимости реализовывать ни один из сценариев перечисленных для синглтона.
  • Основное назначение статических классов все-таки в группировке логически схожих методов, констант, полей и свойств. Например: System.Math, System.BitConverter, System.Buffer, System.Convert и т.д.

Singleton vs Static class

  • Количество точек доступа

      1. Одна (и только одна) точка доступа — статическое поле Instance
      1. N (зависит от количества публичных членов класса и методов)
  • Наследование классов

      1. Возможно, но не всегда (об этом — ниже)
      1. Невозможно — статические классы не могут быть экземплярными, поскольку нельзя создавать экземпляры объекты статических классов
  • Наследование интерфейсов

      1. Возможно, безо всяких ограничений
      1. Невозможно по той же причине, по которой невозможно наследование классов
  • Возможность передачи в качестве параметров

      1. Возможно, поскольку Singleton предоставляет реальный объект
      1. Отсутствует
  • Контроль времени жизни объекта

      1. Возможно — например, отложенная инициализация (или создание по требованию)
      1. Невозможно по той же причине, по которой невозможно наследование классов
  • Использование абстрактной фабрики для создания экземпляра класса

      1. Возможно
      1. Невозможно по причине осутствия самой возможности создания экземпляра

Сериализация

    1. Возможно
    1. Неприменима по причине отсутствия экземпляра

Статический класс

Статический класс - это обычный контейнер для наборов методов, работающий на входных параметрах и не должен возвращать или устанавливать каких-либо внутренных полей экземпляра.

  • Содержит только статические методы.
  • Нельзя создавать его экземпляры.
  • Не может содержать конструкторов/деструкторов экземпляра.

Синглтон

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

  • Синглтоны бывают потокобезопасные или нет.
  • C простой или отложенной инициализацией.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment