简单工厂模式

什么是简单工厂模式?

简单来说:简单工厂模式就是通过创建一个工厂类,这个工厂类会根据输入参数的不同返回不同的类的实例,被创建的实例通常都有同一个父类。

简单工厂模式优点?

  1. 对象的创建交由工厂,客户端可以免除直接创建对象的职责,且不用关心对象创建的过程。
  2. 创建对象时,无需确定要创建哪个类,不需要知道类名,只需要知道参数即可。

简单工厂模式缺点?

  1. 对象的创建全部交由工厂类,逻辑繁多,职责过重,一旦异常会影响调用该工厂的所有方法。
  2. 简单工厂模式会导致类的个数增加,增加系统的复杂度。
  3. 系统扩展困难,一旦增加新类,便不得不修改工厂类的逻辑,违反开闭原则,同时也可能导致逻辑过于复杂。

简单工厂的适用环境?

  1. 工厂类负责创建的类的对象比较少,工厂方法业务逻辑简单。
  2. 客户端只知道传入工厂类的参数,对如何创建对象不关心。

举例(以加减乘除计算器为例)

  1. 创建一个抽象计算类
/** 运算类(父类)*/
public abstract class Operation {// 加减乘除抽象方法public abstract double getResule(double numA, double numB);
}
  1. 创建加减乘除四个子类
/*** 加法类*/
public class AddOperation extends Operation{@Overridepublic double getResule(double numA, double numB) {// TODO Auto-generated method stubreturn numA + numB;}
}
/** 减法类*/
public class SubOperation extends Operation{@Overridepublic double getResule(double numA, double numB) {// TODO Auto-generated method stubreturn numA - numB;}
}
/** 乘法类*/
public class MulOperation extends Operation{@Overridepublic double getResule(double numA, double numB) {// TODO Auto-generated method stubreturn numA * numB;}
}
/** 除法类*/
public class DivOperation extends Operation{@Overridepublic double getResule(double numA, double numB) {// TODO Auto-generated method stubif(numB == 0) {throw new RuntimeException("除数不能为0.");}else {return numA / numB;          }}
}
  1. 创建简单工厂类
/** 简单工厂类*/
public class OperationFactory {public static Operation createOperation(String operate) {Operation operation = null;switch (operate) {case "+":operation = new AddOperation();break;case "-":operation = new SubOperation();break;case "*":operation = new MulOperation();break;case "/":operation = new DivOperation();break;default:break;}return operation;}
}
  1. 创建客户端测试类,打印输出结果
/** 客户端测试类*/
public class Main {public static void main(String[] args) {double result = OperationFactory.createOperation("+").getResule(10, 20);System.out.println(result);}
}

输出结果为:

设计模式之简单工厂模式(静态工厂模式)相关推荐

  1. 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式

    设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...

  2. 简单工厂(静态工厂)

    文章目录 简单工厂(静态工厂) 示例 使用典范 简单工厂(静态工厂) 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,不属于GOF23种设计模式 适用场景: 工厂类负责创建的对象比较少 ...

  3. JAVA设计模式-创建模式-工厂模式-简单工厂模式/静态工厂模式

    简单工厂模式Simple Factory 为什么要有设计模式? 简单工厂模式的类图 简单工厂模式的例子 产品 生产者 消费者 执行结果 后记 鸣谢 为什么要有设计模式? 一个有价值的系统总是会因为需求 ...

  4. java工厂模式静态工厂_Java设计模式之静态工厂模式详解

    本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角 ...

  5. 简单工厂模式(静态工厂模式)

    简单工厂模式 工厂方法模式可以缩小为简单工厂模式(静态工厂模式). 工厂方法模式: 简单工厂模式: 去掉了一个抽象的工厂类.而且一般情况下简单工厂类的create()方法是静态方法. 举个与工厂方法模 ...

  6. PHP 设计模式之工厂模式 (静态工厂模式)

    ### 工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例.工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要作用就是对象创建的 ...

  7. php 工厂静态类,静态工厂模式(Static Factory)

    1.9.1. 目的 与抽象工厂模式类似,此模式用于创建一系列相关或相互依赖的对象. 『静态工厂模式』与『抽象工厂模式』的区别在于,只使用一个静态方法来创建所有类型对象, 此方法通常被命名为 facto ...

  8. spring:动态工厂,静态工厂

    Bean的装配之动态工厂方式 (1) 如何理解Bean的装配? Bean的装配即bean(类对象)的装配 (2) 动态工厂方式创建Bean的步骤有哪些? ① 注册工厂 <!--使用Factory ...

  9. 设计模式之——简单(静态)工厂模式和抽象工厂模式

    文章目录 [关于设计模式] 设计模式的诞生 设计模式概念与解读 设计模式的原则 [关于工厂模式] 简单工厂(静态工厂)模式的概念 抽象工厂模式 工厂模式的使用时机和注意事项 给自己的思考 [关于设计模 ...

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

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

最新文章

  1. php libdir,PHP扩展小结
  2. java 中组合与复用_可复用性和组合
  3. 常见的保险种类,险种分类介绍
  4. 蜗轮蜗杆计算软件_齿轮传动计算软件
  5. 秒杀场景_多线程异步抢单队列分析与实现_02
  6. stripfxg php,zzcms v8.2 中的众多cve分析
  7. 【Java】计算符号函数的值
  8. Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
  9. 【JavaWeb开发】“web应用程序的根目录“与“web站点的根目录“的分析
  10. 无人机倾斜摄影详解,三维实景建模应用
  11. Spring Boot:Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters
  12. JVM、DVM(Dalvik VM)和ART虚拟机的区别
  13. Dremel made simple with Parquet(CN)
  14. 鼠标垫测试软件,百款鼠标垫测试(项目)
  15. jquery可爱的小黑猫
  16. 若依框架添加静态页面,路由配置
  17. bzoj1412: [ZJOI2009]狼和羊的故事(最小割)
  18. 基于深度学习的农作物病虫害识别系统
  19. Cypress 本身启动过程的调试
  20. ftp服务器怎么提供文件和功能,什么是FTP?FTP有哪些功能?

热门文章

  1. pandas对Dataframe数据进行标准化
  2. Win10 配置 HTC VIVE Pro Eye
  3. 解决在谷歌浏览器下载时文件名包含逗号导致页面显示网页不可用问题
  4. OpenCV - 将图片转换为深度学习模型输入格式,BGR通道转RGB,图片归一化,HWC转CHW
  5. MATLAB的四种取整方法
  6. UE5蓝图时间轴摄影机路径动画
  7. MySQL修改最大连接数
  8. houdini 曲线力场
  9. 基于STM32单片机驱动HX711的代码分享,仅供参考
  10. django怎么读python_在Python中的Django框架中进行字符串翻译