Вы должны использовать синглтоны для модульности.
Представьте в синглтоне следующие объекты:
Printer prt;
HTTPInfo httpInfo;
PageConfig pgCfg;
ConnectionPool cxPool;
Дело 1 .
Представьте, что вы этого не сделали, но один класс для хранения всех статических полей / методов.
Тогда вам придется иметь дело с одним большим пулом статики.
Дело 2 .
В вашем текущем случае вы разделили их на соответствующие классы, но в качестве статических ссылок. Тогда было бы слишком много шума, потому что каждое статическое свойство теперь доступно для вас. Если вам не нужна информация, особенно когда много статической информации, вам следует ограничить текущую область кода от просмотра ненужной информации.
Предотвращение беспорядка данных помогает в обслуживании и обеспечивает ограничение зависимостей. Каким-то образом понимание того, что мне доступно или не доступно в моей нынешней области кодирования, помогает мне более эффективно писать код.
Случай 3 Идентификатор ресурса.
Синглтоны позволяют легко масштабировать ресурсы. Допустим, теперь у вас есть единственная база данных для работы, и поэтому вы устанавливаете все ее настройки как статические в классе MyConnection. Что если наступит время, когда вам потребуется подключиться к нескольким базам данных? Если бы вы закодировали информацию о соединении как одноэлементное, улучшение кода было бы сравнительно проще.
Дело 4 Наследование.
Синглтон-классы позволяют себя расширять. Если у вас есть класс ресурсов, они могут совместно использовать общий код. Допустим, у вас есть класс BasicPrinter, который может быть создан как синглтон. Затем у вас есть LaserPrinter, который расширяет BasicPrinter.
Если бы вы использовали статические средства, то ваш код сломался бы, потому что вы не смогли бы получить доступ к BasicPrinter.isAlive как LaserPrinter.isAlive. Тогда ваш фрагмент кода не сможет управлять принтерами разных типов, если вы не разместите избыточный код.
Если вы кодируете в Java, вы все равно можете создать экземпляр полностью статического класса контента и использовать ссылку на экземпляр для доступа к его статическим свойствам. Если кто-то должен это сделать, почему бы не сделать это синглтоном?
Конечно, у расширенных синглтон-классов есть свои проблемы за пределами этого обсуждения, но есть простые способы смягчить эти проблемы.
Дело 5 Избегать информационных налетов.
Существует так мало информации, которую нужно сделать доступной глобально, например, самые большие и самые маленькие целые числа. Почему Printer.isAlive разрешено делать трибуны? Только очень ограниченный набор информации должен быть разрешен для трибуны.
Существует поговорка: думай глобально, действуй локально. Эквивалентно, программист должен использовать синглтоны, чтобы мыслить глобально, но действовать локально.