简单工厂模式(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 {@Overridepublic 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 {@Overridepublic 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()验证用户名密码是否正确。

总结

简单工厂模式的优点:

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

简单工厂模式的缺点:

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

转载于:https://www.cnblogs.com/fangpengchengbupter/p/7798131.html

Java设计模式-简单工厂模式(Static Factory Method)相关推荐

  1. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  2. 轻松看懂java设计模式简单工厂模式

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  3. Java设计模式 -- 简单工厂模式(SimpleFactory)

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式中包含的角色及其职责 1.工厂(C ...

  4. java设计模式-简单工厂模式

    1.实例化对象不需要new,用工厂模式 2.工厂模式分为(简单工厂模式,工厂方法模式,抽象工厂模式) package com.wuming.factory.simple;public interfac ...

  5. java设计模式--简单工厂模式

    1.概念:建立一个工厂(一个函数或一个类方法)来制造新的对象,简单工厂模式静态工厂方法模式,存在的目的很简单:定义一个用于创建对象的接口. (注意点:简单工厂模式的方法是静态的) 2.组成: 1) 工 ...

  6. Java——设计模式(简单工厂模式)

    * A:简单工厂模式概述* 简单工厂模式又叫静态工厂方法模式,它定义了一个具体的工厂类负责创建一些类的实例* B:优点* 客户端不需要再负责对象的创建,从而明确了各个类的职责* 简单来说,客户端你只需 ...

  7. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

  8. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  9. 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  10. Java设计模式之 工厂模式(简单工厂模式)

    前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里: Java 设计模式之单例模式 那么今天就把学习的工厂模式记录下来 工厂模式: 实现了创建者和调用者的分 ...

最新文章

  1. 将sqlite查询结果导入到文本文件
  2. delphi 数据 上移 下移_脑图-数据库查询优化器的艺术
  3. MyBatis入门及CRUD
  4. mysqld 安装细节
  5. wireshark1.8捕获无线网卡的数据包——找不到无线网卡!
  6. 19级:班级日常分享 | 一天一瞬间
  7. python中superclass是什么_深度解析并实现python中的super(转载,好文)
  8. ActiveMQ Windows部署
  9. graphx 基础算法
  10. Context Menu控件
  11. SpringBoot 快速入门
  12. lbp7660cdn设置网络打印,佳能LBP7660Cdn打印机驱动官方版
  13. 操作抖音取名项目日赚 500 实战案例分析
  14. JAXB控制CDATA节点转义
  15. 带农历的html日历插件,魔镜日历插件-可生成带农历的日历月历年历-CDR插件
  16. sql语句之delete
  17. 从MIXMAX概率模型理解Bayesian建模方法
  18. 考研一年到底需要花多少钱?这个你必须要知道!!!
  19. python基础(1)---python简介
  20. Apache2 + PHP之伪静态

热门文章

  1. 机器学习 决策树 监督_监督机器学习-决策树分类器简介
  2. C++笔记----运算符重载
  3. 归纳推理测试没做完_无论顺还是剖,有几件事尽量在生娃当天做完,月子期间基本没负担...
  4. sas数据集怎么导出_SAS:将proc步的输出导出为数据集
  5. 目前最常用的计算机机箱类型为_2016年自考《计算机应用基础》精选习题四
  6. ElasticSearch笔记整理(三):Java API使用与ES中文分词
  7. 恐怖的死亡艺术,稻川淳二为自己办了场VR葬礼
  8. MySql 把B表数据插入到A表中
  9. Cobbler部署指南之配置管理篇[上文]
  10. Samba 共享服务