设计模式之简单工厂模式(静态工厂模式)
简单工厂模式
什么是简单工厂模式?
简单来说:简单工厂模式就是通过创建一个工厂类,这个工厂类会根据输入参数的不同返回不同的类的实例,被创建的实例通常都有同一个父类。
简单工厂模式优点?
- 对象的创建交由工厂,客户端可以免除直接创建对象的职责,且不用关心对象创建的过程。
- 创建对象时,无需确定要创建哪个类,不需要知道类名,只需要知道参数即可。
简单工厂模式缺点?
- 对象的创建全部交由工厂类,逻辑繁多,职责过重,一旦异常会影响调用该工厂的所有方法。
- 简单工厂模式会导致类的个数增加,增加系统的复杂度。
- 系统扩展困难,一旦增加新类,便不得不修改工厂类的逻辑,违反开闭原则,同时也可能导致逻辑过于复杂。
简单工厂的适用环境?
- 工厂类负责创建的类的对象比较少,工厂方法业务逻辑简单。
- 客户端只知道传入工厂类的参数,对如何创建对象不关心。
举例(以加减乘除计算器为例)
- 创建一个抽象计算类
/** 运算类(父类)*/
public abstract class Operation {// 加减乘除抽象方法public abstract double getResule(double numA, double numB);
}
- 创建加减乘除四个子类
/*** 加法类*/
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; }}
}
- 创建简单工厂类
/** 简单工厂类*/
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;}
}
- 创建客户端测试类,打印输出结果
/** 客户端测试类*/
public class Main {public static void main(String[] args) {double result = OperationFactory.createOperation("+").getResule(10, 20);System.out.println(result);}
}
输出结果为:
设计模式之简单工厂模式(静态工厂模式)相关推荐
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...
- 简单工厂(静态工厂)
文章目录 简单工厂(静态工厂) 示例 使用典范 简单工厂(静态工厂) 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,不属于GOF23种设计模式 适用场景: 工厂类负责创建的对象比较少 ...
- JAVA设计模式-创建模式-工厂模式-简单工厂模式/静态工厂模式
简单工厂模式Simple Factory 为什么要有设计模式? 简单工厂模式的类图 简单工厂模式的例子 产品 生产者 消费者 执行结果 后记 鸣谢 为什么要有设计模式? 一个有价值的系统总是会因为需求 ...
- java工厂模式静态工厂_Java设计模式之静态工厂模式详解
本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角 ...
- 简单工厂模式(静态工厂模式)
简单工厂模式 工厂方法模式可以缩小为简单工厂模式(静态工厂模式). 工厂方法模式: 简单工厂模式: 去掉了一个抽象的工厂类.而且一般情况下简单工厂类的create()方法是静态方法. 举个与工厂方法模 ...
- PHP 设计模式之工厂模式 (静态工厂模式)
### 工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例.工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要作用就是对象创建的 ...
- php 工厂静态类,静态工厂模式(Static Factory)
1.9.1. 目的 与抽象工厂模式类似,此模式用于创建一系列相关或相互依赖的对象. 『静态工厂模式』与『抽象工厂模式』的区别在于,只使用一个静态方法来创建所有类型对象, 此方法通常被命名为 facto ...
- spring:动态工厂,静态工厂
Bean的装配之动态工厂方式 (1) 如何理解Bean的装配? Bean的装配即bean(类对象)的装配 (2) 动态工厂方式创建Bean的步骤有哪些? ① 注册工厂 <!--使用Factory ...
- 设计模式之——简单(静态)工厂模式和抽象工厂模式
文章目录 [关于设计模式] 设计模式的诞生 设计模式概念与解读 设计模式的原则 [关于工厂模式] 简单工厂(静态工厂)模式的概念 抽象工厂模式 工厂模式的使用时机和注意事项 给自己的思考 [关于设计模 ...
- JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】
目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式 看一个具体的需求 看一个披萨的项目:要便 ...
最新文章
- php libdir,PHP扩展小结
- java 中组合与复用_可复用性和组合
- 常见的保险种类,险种分类介绍
- 蜗轮蜗杆计算软件_齿轮传动计算软件
- 秒杀场景_多线程异步抢单队列分析与实现_02
- stripfxg php,zzcms v8.2 中的众多cve分析
- 【Java】计算符号函数的值
- Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
- 【JavaWeb开发】“web应用程序的根目录“与“web站点的根目录“的分析
- 无人机倾斜摄影详解,三维实景建模应用
- Spring Boot:Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters
- JVM、DVM(Dalvik VM)和ART虚拟机的区别
- Dremel made simple with Parquet(CN)
- 鼠标垫测试软件,百款鼠标垫测试(项目)
- jquery可爱的小黑猫
- 若依框架添加静态页面,路由配置
- bzoj1412: [ZJOI2009]狼和羊的故事(最小割)
- 基于深度学习的农作物病虫害识别系统
- Cypress 本身启动过程的调试
- ftp服务器怎么提供文件和功能,什么是FTP?FTP有哪些功能?