Назовите основные отличия синглтона от статического класса, и когда следует использовать один, а когда другой?
https://habrahabr.ru/post/103681/
- Необходимо наследование классов или интерфейсов или делегаровать конструирование объектов фабрике
- Необходимо использование экземпляров класса
- Необходимо контролировать время жизни объекта (хоть это и очень редкая задача для синглтона)
- Необходимо сериализовать объект (такая задача гипотетически возможна, но трудно представить себе сценарии использования)
- когда у вас нет необходимости реализовывать ни один из сценариев перечисленных для синглтона.
- Основное назначение статических классов все-таки в группировке логически схожих методов, констант, полей и свойств.
Например:
System.Math, System.BitConverter, System.Buffer, System.Convert
и т.д.
-
Количество точек доступа
-
- Одна (и только одна) точка доступа — статическое поле Instance
-
- N (зависит от количества публичных членов класса и методов)
-
-
Наследование классов
-
- Возможно, но не всегда (об этом — ниже)
-
- Невозможно — статические классы не могут быть экземплярными, поскольку нельзя создавать экземпляры объекты статических классов
-
-
Наследование интерфейсов
-
- Возможно, безо всяких ограничений
-
- Невозможно по той же причине, по которой невозможно наследование классов
-
-
Возможность передачи в качестве параметров
-
- Возможно, поскольку Singleton предоставляет реальный объект
-
- Отсутствует
-
-
Контроль времени жизни объекта
-
- Возможно — например, отложенная инициализация (или создание по требованию)
-
- Невозможно по той же причине, по которой невозможно наследование классов
-
-
Использование абстрактной фабрики для создания экземпляра класса
-
- Возможно
-
- Невозможно по причине осутствия самой возможности создания экземпляра
-
Сериализация
-
- Возможно
-
- Неприменима по причине отсутствия экземпляра
Статический класс - это обычный контейнер для наборов методов, работающий на входных параметрах и не должен возвращать или устанавливать каких-либо внутренных полей экземпляра.
- Содержит только статические методы.
- Нельзя создавать его экземпляры.
- Не может содержать конструкторов/деструкторов экземпляра.
Один из порождающих паттернов. Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
- Синглтоны бывают потокобезопасные или нет.
- C простой или отложенной инициализацией.