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

Не является ли класс со всеми статическими элементами/методами своего рода одноэлементным шаблоном проектирования? Есть ли недостаток, в частности, наличия таких классов? Подробное объяснение поможет.

Ответ 1

Этот класс известен как monostate - он несколько отличается от одноэлементного.

Зачем использовать моностат, а не синглтон? В своей оригинальной бумаге по шаблону Белл и Кроуфорд предлагают три причины (перефразируемые мной):

  • Более естественный синтаксис доступа
  • singleton не имеет имени
  • проще наследовать от

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

Ответ 2

Роберт С. Мартин писал article несколько раз назад о различиях между шаблоном моногосударства и шаблоном singleton.

Ответ 3

Рассмотрим семейство классов каротажа. Все они реализуют "LogMessage (message, file, line_number)). Некоторые отправляют сообщения в stderr, некоторые отправляют электронную почту в набор разработчиков, некоторые увеличивают количество конкретного сообщения в таблице частот сообщений, некоторый маршрут до /dev/null Во время выполнения программа проверяет свои переменные вектора, реестра или среды, для которых используется метод ведения журнала, и создает экземпляр Logging Singleton с объектом из подходящего класса, возможно, для загрузки DLL, предоставляемой конечным пользователем, для этого. трудно дублировать с помощью чистого статического синглтона.

Ответ 4

класс со всеми статическими элементами/методами своего рода одноэлементный шаблон дизайна

Класс - не шаблон. Когда мы говорим о классах, мы можем сказать, что класс реализует шаблон.


Статические функции - не являются функциями-членами, они похожи на глобальные функции. Может быть, вам не нужен класс?

Цитата из wikipedia:

В разработке программного обеспечения синглтон шаблон представляет собой шаблон проектирования, который используется для ограничения экземпляра класс к одному объекту.

В этом определении ваша реализация не является одноэлементной - вы не используете общий пример Один (или несколько в расширенном определении) класса.

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

Ответ 5

Для singleton все конструкторы должны быть частными, так что вы можете получить доступ только через функцию. Но вы очень близки к этому.