1

У меня есть один суперкласс LoginUser и два подкласса AdminUser и StudentUser, которые расширяют LoginUser.Уточнение относительно метода Factory Patern

Раньше у меня было два метода getAdminUser и getStudentUser в классе, и я использовал для создания объекта AdminUser или StudentUser после извлечения их соответствующей роли из базы данных и возврата одного и того же объекта.

В последнее время я пытался реализации шаблон Фабричный метод:

Ниже мой новый код.

public LoginUser getUser(String emailId) 
{ 
    SQLCmd cmd = new GetUserIDByEmail(emailId); 
    cmd.execute(); 
    Integer userId = (Integer)cmd.getResult().get(0); 
    String userType = cmd.getResult().get(1).toString().toLowerCase();  

    GetUserDetailsCmd gudCMD = null; 
    switch(userType) 
    { 
     case "student": 
     { 
      gudCMD = new GetStudentById(userId); 
      gudCMD.execute(); 
      break; 
     } 
     case "admin": 
     { 
      gudCMD = new GetAdminById(userId); 
      gudCMD.execute(); 
      break; 
     } 

    } 
    return (LoginUser)gudCMD.getResult().get(0); 
} 

Когда я называю gudCMD.execute(), GetAdminById создаст объект AdminUser и поместить его в список. аналогично для getStudentById; поэтому я набираю текст и возвращаю его.

Просьба уточнить, является ли это правильной реализацией шаблона Factory method.

ответ

0

Это не реализация шаблона Factory Method, как определено GoF. Метод Factory - это абстрактный метод, который подклассы переопределяют для возврата различных реализаций продукта (например, StudentUser или AdminUser). Чтобы соответствовать шаблону, логика из операторов case будет перемещена в отдельные подклассы, и каждый из них переопределит метод getUser().

Этот пример - это то, что обычно называют простой фабрикой или фабрикой бетона, или если статический статический метод - статическая фабрика. Эти типы заводов очень распространены, но не эквивалентны шаблонам GoF.