Существует множество мнений в этой области, см. Ссылки ниже.
Мне кажется, что мы должны стараться избегать синглетонов, потому что "такого числа как 1 нет".
[Это следует из моей теории, что «такого числа, как 2, не существует». Если у вас есть код, который допускает два с чем-то, и только два с чем-то, то вы пропустили хитрость - почти наверняка будет больше двух, вместо этого решите, как бороться со «многими».
«Нет такого числа, как 1 аргумент» в том, что когда вы думали, что может быть только одно из чего-то, будет некоторый контекст, в котором можно получить больше ... и обычно очень мало дополнительной работы, чтобы больше.
Посмотрите на ваш пример ... У меня есть различные объекты автомобилей, все они имеют доступ к одной и той же дороге? Похоже ли это на модель реалистичного мира? Дороги Великобритании и французские дороги, какая разница? ;-) Зачем встраивать это «единственное» предположение в ваш код?
Использование фабрик и внедрение зависимостей этих фабрик часто будет лучшим ответом. Множество материала в ответах на этот вопрос .