关于工厂方法Patern的澄清

时间:2015-11-13 00:11:34

标签: java design-patterns factory factory-pattern software-design

我有一个超级类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方法模式的正确实现。

1 个答案:

答案 0 :(得分:0)

这是工厂方法模式的实现,由GoF定义。工厂方法是一种抽象方法,其子类覆盖以返回不同的产品实现(例如,StudentUser或AdminUser)。为了符合模式,case语句中的逻辑将被移动到单独的子类中,每个子类都将覆盖getUser()方法。

此示例通常称为简单工厂或混凝土工厂,或者如果方法是静态的,则为静态工厂。这些类型的工厂非常普遍,但不等同于GoF模式。

相关问题