Я читал об одном шаблоне Singleton за последние несколько дней. Общее мнение состоит в том, что сценарии, где это требуется, довольно мало (если не редко), вероятно, потому что у него есть свой собственный набор проблем, таких как
- В среде сбора мусора может возникнуть проблема с управлением памятью.
- В многопоточной среде это может вызвать узкие места и проблемы синхронизации.
- Головная боль от тестирования.
Я начинаю задумываться над этими проблемами, но не полностью уверен в этих проблемах. Как и в случае сбоя в сборке мусора, использование статической в одиночной реализации (что присуще шаблону), является ли это проблемой? Поскольку это будет означать, что статический экземпляр будет длиться до приложения. Это что-то, что ухудшает управление памятью (это просто означает, что память, выделенная для шаблона singleton, не будет освобождена)?
Конечно, в многопоточной настройке, если все потоки в конфликте для экземпляра singleton будут узким местом. Но как использование этого шаблона вызывает проблемы синхронизации (конечно, мы можем использовать мьютекс или что-то подобное для синхронизации доступа).
С точки зрения тестирования (единицы?), поскольку синглтоны используют статические методы (которые трудно подшутить или заострить), они могут вызвать проблемы. Не уверен в этом. Может кто-нибудь прокомментировать эту проблему тестирования?
Спасибо.