Я не уверен, что вы делаете, и не понимаю, поэтому, пожалуйста, прокомментируйте или отредактируйте свой вопрос, если вам нужны дополнительные разъяснения.
ControllerFactory
известен как фабричный объект; это шаблон проектирования, в котором вместо непосредственного вызова конструктора объекта для его создания мы используем другой класс, который несет полную ответственность за выполнение задачи. В этом случае фабрика строит контроллеры баз данных разных типов (каждый из которых имеет разную ожидаемую функциональность), каждый из которых реализует интерфейс SuperController
. Преимущество здесь в том, что мы можем использовать эту фабрику для создания всех этих объектов с одинаковым общим типом. Кроме того, эта фабрика известна как одноэлементная, потому что может быть только один экземпляр созданного объекта (обратите внимание на статическую ссылку и закрытый конструктор).
Итак, имея фабрику, вы можете использовать метод getController
, чтобы получить экземпляр нужного вам объекта.
SuperController
можно рассматривать как контракт, подробно описывающий, какие основные функциональные возможности ожидаются от каждого из потенциальных объектов, которые его реализуют. Точные детали реализации различаются, но общая картина поведения между ними должна быть одинаковой.
ControllerType
- это перечисление, которое определяет, какие существуют допустимые типы контроллеров, а затем основывается на том, какой тип передается в другой тип SuperController. Обратите внимание, что независимо от того, что возвращено, оно всегда будет иметь тип SuperController
, так как оно реализовало этот интерфейс.
Если все, что вы хотите знать, это как его использовать, то вам нужно получить экземпляр фабрики, а затем использовать его для получения вашего контроллера:
ControllerFactory controllerFactory = ControllerFactory.getInstance();
SuperController controller = controllerFactory.getController(ControllerFactory.ControllerType.DESIRED_TYPE_HERE);