Я хорошо знаю, что вы хотите использовать Singleton для предоставления глобальной точки доступа к определенному состоянию или сервису. Преимущества этого шаблона не нужно перечислять в этом вопросе.
Меня интересуют ситуации, когда Синглтон может показаться хорошим выбором вначале, но может вернуться, чтобы укусить вас. Снова и снова, я видел авторов в книгах и плакатах на SO, говорят, что шаблон Singleton часто очень плохая идея.
The Gang of Four заявляет, что вы захотите использовать Singleton, когда:
- должен быть ровно один экземпляр класса, и он должен быть доступен клиентам из известной точки доступа.
- когда единственный экземпляр должен быть расширяемым путем подкласса, а клиенты должны иметь возможность использовать расширенный экземпляр без изменения своего кода.
Эти точки, хотя, безусловно, примечательны, не являются практическими, которые я ищу.
Есть ли у кого-либо набор правил или предостережений, которые вы используете для оценки того, действительно ли вы действительно, действительно уверены, что хотите использовать Singleton?