我有一个超级类LoginUser和两个子类AdminUser和StudentUser,它们扩展了LoginUser。
以前,我在一个类中有两个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对象并将其放入List。同样适用于getStudentById;这就是我输入并返回它的原因。
请说明这是否是Factory方法模式的正确实现。
答案 0 :(得分:0)
这是不工厂方法模式的实现,由GoF定义。工厂方法是一种抽象方法,其子类覆盖以返回不同的产品实现(例如,StudentUser或AdminUser)。为了符合模式,case
语句中的逻辑将被移动到单独的子类中,每个子类都将覆盖getUser()
方法。
此示例通常称为简单工厂或混凝土工厂,或者如果方法是静态的,则为静态工厂。这些类型的工厂非常普遍,但不等同于GoF模式。