Можете ли вы объяснить мне этот код, пожалуйста, верните SuperController - PullRequest
0 голосов
/ 04 января 2019

Я нашел этот код в github для системы управления студентами, которая использует шаблон DTO


public interface SuperController<T extends SuperDTO>{
    public boolean add(T dto) throws SQLException;

    public T getAll(String id)throws SQLException; }

и SuperDTO - пустой класс без каких-либо полей или методов

public class SuperDTO {

}

моя проблема, я могу понять, как вызвать этот SuperController, используя следующий класс:

public class ControllerFactory{
    private static ControllerFactory controllerFactory;

    private BatchDBControllerImpl ctrlBatch;

    public enum ControllerType{
        BATCH,CLASSES,LOGIN,REGISTER,STUDENT,ATTENDANCE,PAYMENT,EXAM,EXAM_DETAIL;
    }

    private ControllerFactory() {
    }

    public static ControllerFactory getInstance(){
       if(controllerFactory==null){
           controllerFactory=new ControllerFactory();
       } 
       return controllerFactory;
    }

    public SuperController getController(ControllerType type){
        switch(type){
            case BATCH:
                return new BatchDBControllerImpl();
            case CLASSES:
                return new ClassesDBControllerImpl();
            case LOGIN:
                return new LoginDBControllerImpl();
            case REGISTER:
                return new RegisterDBControllerImpl();
            case STUDENT:
                return new StudentDBControllerImpl();
            case ATTENDANCE:
                return new AttendanceDBControllerImpl();
            case PAYMENT:
                return new PaymentDBControllerImpl();
            case EXAM_DETAIL:
                return new ExamDetailDBControllerImpl();
            case EXAM:
                return new ExamDBControllerImpl();
            default :
                return null;
        }
    }

}

объясните, пожалуйста, этот метод:

public SuperController getController(ControllerType type)

1 Ответ

0 голосов
/ 04 января 2019

Я не уверен, что вы делаете, и не понимаю, поэтому, пожалуйста, прокомментируйте или отредактируйте свой вопрос, если вам нужны дополнительные разъяснения.

ControllerFactory известен как фабричный объект; это шаблон проектирования, в котором вместо непосредственного вызова конструктора объекта для его создания мы используем другой класс, который несет полную ответственность за выполнение задачи. В этом случае фабрика строит контроллеры баз данных разных типов (каждый из которых имеет разную ожидаемую функциональность), каждый из которых реализует интерфейс SuperController. Преимущество здесь в том, что мы можем использовать эту фабрику для создания всех этих объектов с одинаковым общим типом. Кроме того, эта фабрика известна как одноэлементная, потому что может быть только один экземпляр созданного объекта (обратите внимание на статическую ссылку и закрытый конструктор).

Итак, имея фабрику, вы можете использовать метод getController, чтобы получить экземпляр нужного вам объекта.

SuperController можно рассматривать как контракт, подробно описывающий, какие основные функциональные возможности ожидаются от каждого из потенциальных объектов, которые его реализуют. Точные детали реализации различаются, но общая картина поведения между ними должна быть одинаковой.

ControllerType - это перечисление, которое определяет, какие существуют допустимые типы контроллеров, а затем основывается на том, какой тип передается в другой тип SuperController. Обратите внимание, что независимо от того, что возвращено, оно всегда будет иметь тип SuperController, так как оно реализовало этот интерфейс.

Если все, что вы хотите знать, это как его использовать, то вам нужно получить экземпляр фабрики, а затем использовать его для получения вашего контроллера:

ControllerFactory controllerFactory = ControllerFactory.getInstance();
SuperController controller = controllerFactory.getController(ControllerFactory.ControllerType.DESIRED_TYPE_HERE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...