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