一、概述

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 -------------来自百度百科

优点

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

缺点

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

这些缺点在工厂方法模式中得到了一定的克服。

使用场景

工厂类负责创建的对象比较少;

客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

二、java代码实现

  • 问题描述:设计一个用于加减乘除运算的工厂,并提供一个静态方法给客户端运算时使用。
  • UML图:

首先是所有运算类的父类Operation,然后是四个最简单的计算类:

package cn.smileyan.design.easyfactory;
/*** @title 计算类* @author Smileyan* @time: 2018/08/29* @description 计算类,作为父类 */
public class Operation {private double num1;private double num2;public double getNum1() {return num1;}public void setNum1(double num1) {this.num1 = num1;}public double getNum2() {return num2;}public void setNum2(double num2) {this.num2 = num2;}// 返回运算结果public double getResult() {return 0;}
}
package cn.smileyan.design.easyfactory;
/*** @title 加法类* @author Smileyan* @time: 2018/08/29* @description 计算类,加法运算 */
public class OperationAdd extends Operation {// 重写父类方法@Overridepublic double getResult() {return this.getNum1()+this.getNum2();}
}
package cn.smileyan.design.easyfactory;
/*** @title 除法类* @author Smileyan* @time: 2018/08/29* @description 计算类,除法运算 */
public class OperationDiv extends Operation {@Overridepublic double getResult() {if(this.getNum2()==0) {System.out.println("除数不能为0");return 0;}return this.getNum1()/this.getNum2();}}
package cn.smileyan.design.easyfactory;
/*** @title 乘法类* @author Smileyan* @time: 2018/08/29* @description 计算类,乘法运算 */
public class OperationMul extends Operation {@Overridepublic double getResult() {return this.getNum1()*this.getNum2();}
}
package cn.smileyan.design.easyfactory;
/*** @title 减法类* @author Smileyan* @time: 2018/08/29* @description 计算类,减法运算 */
public class OperationSub extends Operation {// 重写父类方法@Overridepublic double getResult() {return this.getNum1()-this.getNum2();}
}

其次是工厂类:

package cn.smileyan.design.easyfactory;
/*** @title OperationFactory* @author Smileyan* @description 工厂类,直接与客户打交道的类*/
public class OperationFactory {public static Operation createOperation(String op) {Operation operation=null;// 判断并且确认将返回的对象switch (op) {case "+":operation=new OperationAdd();break;case "-":operation=new OperationSub();break;case "*":operation=new OperationMul();break;case "/":operation=new OperationDiv();break;default:break;}return operation;}
}

最后是我们的客户端,也就是使用这个简单工厂的类,或者说是测试类吧。

package cn.smileyan.design.easyfactory;/*** @title User * @author Smileyan* @description 客户端,即简单工厂的使用者*/
public class User {public static void main(String[] args) {Operation operation=null;// 此处可以更改为其他运算符 而其他地方可以保持不变String op="-"; operation = OperationFactory.createOperation(op);operation.setNum1(99);operation.setNum2(97);System.out.println(operation.getResult());}
}

最终的运行结果可想而知:我们修改main方法中的op变量,而其他地方不需要修改,即可进行各项运算并返回结果。

三、总结

简单工厂模式相对于23种GOF设计模式来说要简单一些,在我们不知不觉中可能已经用过很多次简单工厂模式——尽管我们当初并不知道自己写的代码也算是“模式”。

简单工厂模式 简单例子相关推荐

  1. js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象

    1.Factory基本写法 <!DOCTYPE html> <html lang="en"> <head>     <meta chars ...

  2. 树莓派开发实战项目 智能家居--简单工厂模式(简单工厂模式介绍)

    一.搭建模型 二.设计模式的概念引入 1.什么是设计模式 软件设计模式(Design pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是 ...

  3. 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

    工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类 ...

  4. C++设计模式之 简单工厂模式讲解(历史上最简单明白的例子)

    工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类 ...

  5. python的编程模式-使用简单工厂模式来进行Python的设计模式编程

    计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通过 ...

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

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

  7. java设计模式:简单工厂模式

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

  8. python工厂模式 简书_[Python设计模式] 01 - 简单工厂模式

    设计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通 ...

  9. 设计模式——通过简单工厂模式推出工厂方法模式

    文章目录 工厂模式简介 简单工厂模式 工厂方法模式 工厂模式简介 工厂模式,是通过一个工厂来进行创建对象的,我们不用去new对象了,而是直接在工厂中get对象.但是,这样做的好处是什么呢? 实现了解耦 ...

  10. JAVA设计模式笔记(简单工厂模式)

    有一个水果加工工厂,我们的需求是实现加工水果的功能.常见的做法是创建一个水果抽象类,写一个抽象的加工方法,然后创建具体的水果类去继承抽象类,再去实现抽象方法,最后客户端再去新建对象实例. public ...

最新文章

  1. linux 6.4定时启动,Centos6.4 设置开机自动以某个非root用户启动脚本
  2. spring-boot-autoconfigure-xx.jar核心注解
  3. php怎么取json数组元素个数,json,数组_取出json数据中的某一项组成一个数组?,json,数组,php - phpStudy...
  4. 100%有用的Photoshop实用快捷健介绍
  5. C语言:使用递归解决汉诺塔问题。
  6. 前端a链接读取txt文件导出下载_HTML页面点击下载文件的两种实现方法
  7. TCON控制字及TMOD寄存器
  8. P18-Vue3后台管理系统-用户管理界面-表格编辑和删除操作
  9. Word删除页眉横线的方法
  10. 学报格式和论文格式一样吗_工大学报论文格式要求
  11. matlab绘制圆极化波,圆极化波及其MATLAB仿真_西电
  12. 计算机主板供电,你也可以看懂主板供电相数和用料情况,轻松选好主板
  13. java学习总结(16.07.16)Random类和BigDecimal类
  14. 发送消息(SendMessage)常识普及
  15. (二)textarea中placeholder不显示
  16. 关于绝地求生某辅助白名单画中画逆向分析
  17. 华为p10自带计算机,华为p10如何连接电脑 华为p10连接电脑教程【图文】
  18. tmux命令启动MySQL_程序后台运行的几种方法
  19. 青藤放飞“猎鹰”,主动防御又多一张牌
  20. 《纸牌屋》:大数据只是噱头

热门文章

  1. 河南增值税开票系统原服务器地址,河南省增值税发票综合服务平台登录入口:https://fpdk.henan.chinatax.gov.cn...
  2. ahci驱动,详细教您win10系统下怎么加载ahci驱动
  3. [转]KSN报告:2014 - 2016年的PC勒索软件
  4. 【分享】班组5S管理实践办法
  5. 蒙提霍尔问题(三门问题)的思考与贝叶斯分析
  6. 源码解析-为什么引入了jackson-dataformat-xml 包我的接口全变成了xml格式?
  7. log算子 和dog 算子
  8. Kafka原理以及分区分配策略剖析
  9. 基于java springmvc+mybatis酒水商城管理系统设计和实现
  10. matlab对控制系统进行时域和频域联合分析