"Это проблема [с конфигурацией Singleton]?
Не совсем.
"все остальные классы, зависящие от этого синглтона"
Не совсем. Вы можете легко спроектировать вещи так, чтобы некоторые классы получали конфигурацию и передавали ее другим классам.
Это вопрос ответственности - какой класс / пакет / метод отвечает за эту проблему конфигурации. И ответ должен быть очень, очень немногие классы должны знать конфигурацию.
Ваша модель, например, должна быть сфокусирована на проблемной области независимо от нюансов реализации. Возможно, не требуется никакой конфигурации.
«Есть ли другое, идеальное решение, о котором я не думал?»
Не совсем. Проблема конфигурации сложна. У вас может быть конфигурация по умолчанию, переопределяющая конфигурация по умолчанию, параметры командной строки. Это довольно сложно.
«Как вы, люди, обычно представляете этот тип данных?»
Синглтон по большей части. Как правило, несколько ключевых классов «верхнего уровня» в данном приложении должны знать конфигурацию и использовать эту информацию для настройки всех других классов.
Для программы командной строки класс, который вызывается "основной" программой для анализа аргументов, также будет знать о конфигурации. И это все.
Для веб-приложения часть веб-приложения верхнего уровня использует конфигурацию для создания, настройки, настройки или создания других объектов. Во многих случаях ключ Factory будет использовать конфигурацию, чтобы решить, что создавать. Для ключа Builder может потребоваться настройка для настройки составных объектов при его построении.
Конфигурация не является "глобальной". Это видно не всем классам. Как и база данных, он является ценным ресурсом и тщательно упакован классами, отвечающими за настройку.
«Есть ли что-то еще, что я должен знать об этой проблеме?»
Да. Конфигурация Singleton не является глобальной. Это редкий, ценный ресурс, который используется в нескольких ключевых местах. Чем меньше, тем лучше.