Когда сообщество считает уместным использовать синглтон?[дубликат]

StackOverflow https://stackoverflow.com/questions/138124

  •  02-07-2019
  •  | 
  •  

Вопрос

Возможный дубликат:
Синглтон:Как его следует использовать

В продолжение превосходного предыдущего вопроса Юэна Мейкписа о шаблоне Singleton я решил спросить: «Когда сообщество считает, что уместно использовать Singleton?»

Позвольте мне предложить пример для критики:

У меня есть синглтон «IconManager».Он начинается с чтения файла свойств, который указывает, где находятся мои значки на диске, а затем считывает все значки и кэширует их для будущего использования.

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

Какие еще варианты использования синглтонов могут быть?

Это было полезно?

Решение

Ваш IconManager реализует фабричный шаблон, он создает значки.И вам, вероятно, понадобится только одна фабрика для создания иконок.Так что в этом случае нет проблем с использованием синглтона, ИМХО.Я создал программное обеспечение с помощью нескольких таких централизованных фабрик, и все работало нормально.

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

Другие советы

Альтернативный подход — создать экземпляр вашего класса, который загружает значки, а затем передать ссылку на этот экземпляр каждому элементу управления, которому необходим доступ к ресурсам.Таким образом, в будущем вы сможете иметь более одного загрузчика значков и передавать их по мере необходимости.Более гибкий для будущего, но с довольно большим недостатком, заключающимся в том, что вам придется передавать ссылку миллиону элементов управления.

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

Допустим, вы подключаетесь к CCTV камера это позволяет только одно соединение.Шаблон Singleton создаст это соединение при первом использовании и оставит его открытым.Всякий раз, когда вам нужно изображение с камеры, возможно, из нескольких источников, вы можете нажать Singleton, зная, что, несмотря на все остальные проблемы, изображение будет доступно.

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

На самом деле я никогда не использовал синглтон, но и шаблоны проектирования особо не использовал.Я думаю, что они очень ценны, когда их требуют другие шаблоны, такие как шаблоны «Фабрика» и «Шлюз».Однако они почти никогда не хороши сами по себе.

Возможно, вы захотите рассмотреть Моностатный шаблон который дает вам все преимущества синглтона без многих недостатков.Это также позволяет вам иметь богатый объект с состоянием, которое просто имеет глобальные свойства, которые вы ищете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top