Не используйте синглтон для чего-то, что может превратиться в умножаемый ресурс.
Возможно, это звучит глупо, но если вы объявляете что-то одноэлементным, вы делаете очень сильное утверждение, что оно абсолютно уникально. Вы строите код вокруг этого, все больше и больше. И когда вы после тысячи строк кода узнаете, что это вовсе не синглтон, перед вами огромный объем работы, потому что все другие объекты ожидают, что «священный» объект класса WizBang будет синглтоном. .
Типичный пример: «Это приложение имеет только одно соединение с базой данных, поэтому оно одноэлементное». - Плохая идея. Возможно, вы захотите иметь несколько соединений в будущем. Лучше создать пул соединений с базой данных и заполнить его только одним экземпляром. Действует как Singleton, но весь другой код будет иметь расширяемый код для доступа к пулу.
РЕДАКТИРОВАТЬ: Я понимаю, что теоретически вы можете расширить синглтон на несколько объектов. Тем не менее, не существует реального жизненного цикла (такого как объединение в пул / отмена), что означает, что нет реального права собственности на объекты, которые были розданы, то есть теперь мульти-синглтон должен быть без сохранения состояния, чтобы использоваться одновременно различными методами и потоками. 1009 *