Dinesh Kumar Dora Ответов: 2

Статические классы против синглтона


Когда мы можем сделать то же самое с помощью статических классов, зачем нам нужен синглтон?

Я много исследовал, но не мог понять основной разницы. Может ли кто-нибудь объяснить мне это простыми словами с примерами?

Спасибо
Динеш

Что я уже пробовал:

google искал, но не мог понять из объяснений

2 Ответов

Рейтинг:
18

F-ES Sitecore

Используя синглеты, легче контролировать, когда класс инициализируется, чтобы использовать такие вещи, как ленивая инициализация и т. д. Используя статические классы, вы в значительной степени получаете то, что вам дано, ваш класс инициализируется при создании. Кроме того, используя sigleton, ваш конечный класс все еще является объектом, а не статическим классом, поэтому имеет преимущества, которые приходят с этим, то есть он может быть использован в модульном тестировании проще, использовать функции OO, такие как наследование, может быть передан как объект другим методам, хранить состояние и т. д.


Nathan Minier

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

F-ES Sitecore

Не уверен, что я соглашусь с этим на самом деле, либо можно сделать потокобезопасными, либо нет, в зависимости от того, как вы их кодируете. Фреймворк гарантирует, что статический конструктор будет потокобезопасным, но что касается методов, то все зависит от того, как вы их кодируете, как это было бы и для синглтона, только с синглтоном вы иногда полагаетесь на свой собственный код для обеспечения потокобезопасной инициализации, а не на гарантии, предоставляемые фреймворком.

Nathan Minier

Это справедливо,и мы можем согласиться не согласиться.

Однако если я назову что-нибудь синглетным, я собираюсь обеспечить потокобезопасность на нем, чтобы нижестоящие разработчики не получили неприятного сюрприза. Статичный предмет, однако? Чистый Дикий Запад.

F-ES Sitecore

ГМ ... потокобезопасные статические конструкторы гарантированы .net framework. Вы думаете, что ваш собственный код более надежен, чем фреймворк? Может быть тогда тебе стоит устроиться на работу в Microsoft :)

Nathan Minier

Не строительство, а методы.

F-ES Sitecore

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

Nathan Minier

..Если я пишу класс, который должен функционировать как синглтон, я удостоверяюсь, что методы (и геттеры/сеттеры) потокобезопасны, чтобы нижестоящие пользователи могли ожидать последовательных операций.

Если я пишу статический класс, я этого не делаю.

Это довольно распространенная модель среди разработчиков фреймворков, судя по моему опыту, поэтому я и предложил это дополнение в первую очередь. Если вы не согласны, это прекрасно, но серьезно.

F-ES Sitecore

Но если бы вы писали статический класс, то сделали бы это в любом случае, не так ли? Вы не можете сказать, что статические классы менее потокобезопасны, потому что, когда вы их пишете, вы не делаете их потокобезопасными. Вы *должны * сделать их потокобезопасными, так как статический класс *должен* быть одноэлементным.

Nathan Minier

Отсюда и слово "вывод", основанное на наблюдении. Но как бы то ни было, развлекайся.

Karthik_Mahalingam

5