在阎宏博士的《JAVA与模式》一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明:

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

public interface Login {    //登录验证    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        /**         * 业务逻辑         */        return true;    }

}

public class PasswordLogin implements Login {

    @Override    public boolean verify(String name, String password) {        // TODO Auto-generated method stub        /**         * 业务逻辑         */        return true;    }

}

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

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 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) {            /**             * 业务逻辑             */        } else {            /**             * 业务逻辑             */        }    }}

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

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

假如不使用简单工厂模式则验证登录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";        //处理口令认证        if(loginType.equals("password")){            PasswordLogin passwordLogin = new PasswordLogin();            boolean bool = passwordLogin.verify(name, password);            if (bool) {                /**                 * 业务逻辑                 */            } else {                /**                 * 业务逻辑                 */            }        }        //处理域认证        else if(loginType.equals("passcode")){            DomainLogin domainLogin = new DomainLogin();            boolean bool = domainLogin.verify(name, password);            if (bool) {                /**                 * 业务逻辑                 */            } else {                /**                 * 业务逻辑                 */            }            }else{            /**             * 业务逻辑             */        }    }}

上面的代码会不会很蛋疼啊。。。呵呵

《JAVA与模式》一书中使用java.text.DataFormat类作为简单工厂模式的典型例子叙述。

简单工厂模式的优点

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

简单工厂模式的缺点

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

转载于:https://www.cnblogs.com/zhaolizhe/p/6924022.html

《JAVA与模式》之简单工厂模式相关推荐

  1. java简单工厂模式_Java 简单工厂模式

    Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...

  2. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  3. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  4. Java设计模之简单工厂模式

    设计模式之工厂模式一简单工厂模式 工厂模式由来: 在我们创建对象的时候使用,使用new操作的.如果多个对象创建都使用new会.所以工厂模式就是用来代理new操作的一种模式.根据工厂模式由来,我们可以看 ...

  5. 工厂模式——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3) ...

  6. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

  7. 设计模式—工厂模式之简单工厂模式

    1. 简单工厂模式简介 简单工厂模式(Simple Factory),又被称为"静态工厂方法模式".它属于"创建模式"(创建对象的模式),并且是"工厂 ...

  8. 策略模式与简单工厂模式区别(转)

    最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简 ...

  9. 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)

    工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...

  10. 大话设计模式-策略模式与简单工厂模式

    来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...

最新文章

  1. 电脑开不了不用U盘怎么装系统?
  2. 这声音酥了!萌妹程序员鼓励师24小时在线陪你写代码,给我吹爆这个VSCode插件...
  3. MAC地址如何在windows与unix下查看?
  4. 小程序和app用什么样的服务器,小程序和APP的本质区别是什么?哪个更值得开发?...
  5. docker的安装与安装mysql(mac,centos为例)
  6. 视觉SLAM笔记(15) 李群与李代数
  7. Java 的强引用、弱引用、软引用、虚引用
  8. C++学习笔记 之 循环
  9. 【语音编码】基于matlab PCM编解码【含Matlab源码 555期】
  10. python 斯皮尔曼相关系数_斯皮尔曼等级相关系数(Spearmansrankcorrelationcoefficient)
  11. 太实用了!这几个Python数据可视化案例!
  12. 送给计算机老师平安夜贺卡,平安夜小朋友送老师的贺卡寄语
  13. 基于51单片机的多线程操作系统设计
  14. 基于web的木子日记个人博客网站的设计与实现
  15. vue项目中eslint规则校验配置
  16. 中职计算机应用教学的重要性,中职《计算机应用基础》教学中理实一体化的有效开展...
  17. 做金融理财直播,直播内容有什么?
  18. vue watch store
  19. 每日一练蓝桥杯C语言:暴力枚举
  20. win32项目和win32控制台程序的区别

热门文章

  1. strcpy_s与strcpy的比較
  2. 静态路由和默认路由的配置实例
  3. 闲来无事,总结 Xcode常用快捷键
  4. 分享:个人是怎么学习新知识的
  5. javascript全栈开发实践-准备
  6. android 每个块半径不同的扇形图,自定义view
  7. Python 语法相关知识
  8. numpy.ndarray的赋值操作
  9. 每天60万人次在连接风险WiFi 有你吗
  10. 【Python】重载模块