zoukankan      html  css  js  c++  java
  • Java设计模式-简单工厂模式(Static Factory Method)

    简单工厂模式(Static Factory Method)

    简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。那么简单工厂模式应用在那些场景呢:

    拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证,域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中去验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口:如下图所示:

    package com.tutorialspoint;
    
    public interface Login {
        //登录验证
        public boolean verify(String username , String password);
    }

    域名登录类:

    package com.tutorialspoint;
    
    public class DomainLogin implements Login {
    
        @Override
        public boolean verify(String username, String password) {
            // TODO Auto-generated method stub
            //业务逻辑
            System.out.println("Login through passcode!");
            return true;
        }
    
    }

    密码登录类:

    package com.tutorialspoint;
    
    public class PasswordLogin implements Login {
    
        @Override
        public boolean verify(String username, String password) {
            // TODO Auto-generated method stub
            //业务逻辑
            System.out.println("Login through password!");
            return true;
        }
    
    }

    还需要一个工厂类,根据调用者的不同要求,创建出不同的登录对象并返回。而如果碰到不合法的要求,会返回一个Runtime异常。

    package com.tutorialspoint;
    
    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 {
                throw new RuntimeException("不合法的登录类型");
            }
        }
    }

    测试类:

    public class MainApp {
        public static void main(String[] args) {
    //        AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    ////        XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("Beans.xml"));
    ////        HelloWorld h = (HelloWorld) factory.getBean("helloWorld");
    //        HelloWorld h = (HelloWorld) context.getBean("helloWorld1");
    //        System.out.println(h.getMessage());
    //        context.registerShutdownHook();
    //        context.close();
            String loginType = "passcode";
            String username = "admin";
            String password ="admin";
            Login login = LoginManager.factory(loginType);
            login.verify(username, password);
        }
    }

    运行结果为:

    简单工厂模式的结构如下图:

    可以设想一下真实的场景,如果把上面的Test当做一个servlet的话,当客户端发起登录请求->请求交给服务端的Servlet->Servlet根据客户端传递的loginType调用工厂类LoginManager的factory()方法->factory()方法根据参数loginType创建响应的登录验证类(DomainLogin或PasswordLogin)并返回->登录验证类调用方法verfy()验证用户名密码是否正确。

    总结

    简单工厂模式的优点:

    模式的核心是工厂类,这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种方法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。

    简单工厂模式的缺点:

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

  • 相关阅读:
    terraform入门操作指南
    linux常用命令
    pssh用法范例
    nginx共享内存使用
    Redis监控指标[转]
    xargs用法笔记
    systemd用法记录一
    esxcli部分常用命令
    lua自定义功能模块table类型转string类型
    curl用法笔记
  • 原文地址:https://www.cnblogs.com/fangpengchengbupter/p/7798131.html
Copyright © 2011-2022 走看看