Скажем, у меня есть класс PermissionManager, который должен существовать только один раз для моей системы и в основном выполняет функцию управления различными разрешениями для различных действий в моем приложении. Теперь у меня есть некоторый класс в моем приложении, который должен иметь возможность проверить определенное разрешение в одном из его методов. Конструктор этого класса в настоящее время общедоступен, т.е. используется пользователями API.
Еще пару недель назад я просто попросил бы мой класс вызвать где-нибудь следующий псевдокод:
PermissionManager.getInstance().isReadPermissionEnabled(this)
Но так как я заметил, что все здесь ненавидят синглтоны + этот тип связи, мне стало интересно, каким будет лучшее решение, поскольку кажется, что аргументы, которые я прочитал против синглетов, имеют смысл (не проверяемые, высокая связь и т. Д.) .
Так должен ли я на самом деле требовать, чтобы пользователи API передавали экземпляр PermissionManager в конструктор класса? Даже если я хочу, чтобы для моего приложения существовал только один экземпляр PermissionManager?
Или я все делаю неправильно, и у меня должен быть где-то не общедоступный конструктор и фабрика, которая передает мне экземпляр PermissionManager?
Дополнительная информация Обратите внимание, что когда я говорю "Внедрение зависимостей", я говорю о DI Pattern ... Я не использую какую-либо инфраструктуру DI, такую как Guice или Spring. (... еще)