Не является ли класс со всеми статическими элементами/методами своего рода одноэлементным шаблоном проектирования? Есть ли недостаток, в частности, наличия таких классов? Подробное объяснение поможет.
Статический класс и singleton
Ответ 1
Этот класс известен как monostate - он несколько отличается от одноэлементного.
Зачем использовать моностат, а не синглтон? В своей оригинальной бумаге по шаблону Белл и Кроуфорд предлагают три причины (перефразируемые мной):
- Более естественный синтаксис доступа
- singleton не имеет имени
- проще наследовать от
Должен признаться, я не считаю, что это особенно убедительно. С другой стороны, моностат определенно не хуже синглтона.
Ответ 2
Роберт С. Мартин писал article несколько раз назад о различиях между шаблоном моногосударства и шаблоном singleton.Ответ 3
Рассмотрим семейство классов каротажа. Все они реализуют "LogMessage (message, file, line_number)). Некоторые отправляют сообщения в stderr, некоторые отправляют электронную почту в набор разработчиков, некоторые увеличивают количество конкретного сообщения в таблице частот сообщений, некоторый маршрут до /dev/null Во время выполнения программа проверяет свои переменные вектора, реестра или среды, для которых используется метод ведения журнала, и создает экземпляр Logging Singleton с объектом из подходящего класса, возможно, для загрузки DLL, предоставляемой конечным пользователем, для этого. трудно дублировать с помощью чистого статического синглтона.
Ответ 4
класс со всеми статическими элементами/методами своего рода одноэлементный шаблон дизайна
Класс - не шаблон. Когда мы говорим о классах, мы можем сказать, что класс реализует шаблон.
Статические функции - не являются функциями-членами, они похожи на глобальные функции. Может быть, вам не нужен класс?
Цитата из wikipedia:
В разработке программного обеспечения синглтон шаблон представляет собой шаблон проектирования, который используется для ограничения экземпляра класс к одному объекту.
В этом определении ваша реализация не является одноэлементной - вы не используете общий пример Один (или несколько в расширенном определении) класса.
Но иногда (не всегда) использование класса со всеми статическими функциями и одноэлементным шаблоном - не имеет значимой разницы.
Ответ 5
Для singleton все конструкторы должны быть частными, так что вы можете получить доступ только через функцию. Но вы очень близки к этому.