Допустим, нам нужен только один экземпляр некоторого класса в нашем проекте. Есть несколько способов сделать это.
Я хочу сравнить. Пожалуйста, ознакомьтесь с моим пониманием.
1) Классический шаблон Singleton
2) Полностью статический класс (все методы и члены статичны).
Насколько я понимаю, различия заключаются в следующем:
a) Порядок инициализации статических элементов в разных модулях не определено. Таким образом, инициализация полностью статических членов не может использовать какие-либо статические члены / функции из других модулей. И синглтон не имеет этой проблемы.
б) Нам нужно иметь дело с потоками для getInstance () синглтона. Однако полностью статический класс не имеет этой проблемы.
c) Доступ к методам выглядит немного иначе. Foo :: bar (); vs Foo :: getInstance () -> bar (); Как правило, singleton может возвращать NULL, чтобы определить, что были некоторые проблемы с построением объекта, а статический класс не может.
d) Определение класса выглядит немного неуклюжим с кучей статики для статического класса.
Я могу что-то пропустил?