专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java简单工厂模式的详细介绍

Java简单工厂模式的详细介绍

更新时间:2022-04-02 10:28:09 来源:动力节点 浏览1141次

我们首先描述了简单工厂模式:简单工厂模式是一种类创建模式,也称为静态工厂方法模式。简单工厂模式是一个工厂对象,它决定创建哪个产品类实例。

在登录功能方面,如果应用系统需要支持多种登录方式,如密码认证和域认证(密码认证通常是对数据库中的用户进行验证,而域认证是对微软域中的用户进行验证)。这样做的自然方法是创建一个适用于各种登录模式的界面,如下图所示:

public interface Login {
    //validate logon
    public boolean verify(String name , String password);
}
public class DomainLogin implements Login {
    @Override
    public boolean verify(String name, String password) {
        // TODO Auto-generated method stub
        /**
         * Business logic
         */
        return true;
    }
}
public class PasswordLogin implements Login {
    @Override
    public boolean verify(String name, String password) {
        // TODO Auto-generated method stub
        /**
         * Business logic
         */
        return true;
    }
}

我们还需要一个工厂类LoginManager来创建不同的登录对象,并根据调用者的不同需求返回。如果遇到非法请求,则返回运行时异常。

public class LoginManager {
    public static Login factory(String type){
        if(type.equals("password")){            
            return new PasswordLogin();            
        }else if(type.equals("passcode")){            
            return new DomainLogin();            
        }else{
            /**
             * It would be more appropriate to throw a custom exception here
             */
            throw new RuntimeException("No login type found");
        }
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String loginType = "password";
        String name = "name";
        String password = "password";
        Login login = LoginManager.factory(loginType);
        boolean bool = login.verify(name, password);
        if (bool) {
            /**
             * Business logic
             */
        } else {
            /**
             * Business logic
             */
        }
    }
}

如果不使用简单工厂模式,验证登录Servlet代码如下(假设Test是一个Servlet,变量loginType、name、password代表客户端传过来的参数):

public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub        
        String loginType = "password";
        String name = "name";
        String password = "password";
        //Handling password authentication
        if(loginType.equals("password")){
            PasswordLogin passwordLogin = new PasswordLogin();
            boolean bool = passwordLogin.verify(name, password);
            if (bool) {
                /**
                 * Business logic
                 */
            } else {
                /**
                 * Business logic
                 */
            }
        }
        //Processing Domain Authentication
        else if(loginType.equals("passcode")){
            DomainLogin domainLogin = new DomainLogin();
            boolean bool = domainLogin.verify(name, password);
            if (bool) {
                /**
                 * Business logic
                 */
            } else {
                /**
                 * Business logic
                 */
            }    
        }else{
            /**
             * Business logic
             */
        }
    }
}

JAVA and Models 使用 java.text.DataFormat 类作为简单工厂模式的典型示例。

简单工厂模式的优势

模型的核心是工厂类。该类包含必要的逻辑判断来决定何时创建登录验证类的实例,而调用者则免除了直接创建对象的责任。简单工厂模式通过这种方式实现了职责分工,当系统引入新的登录模式时,不需要修改调用者。

简单工厂模型的缺点

这个工厂类集中了所有的创建逻辑。当有复杂的层次结构时,所有的业务逻辑都在这个工厂类中实现。当它不能工作时,整个系统都会受到影响。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>