简单工厂模式
来源:互联网 发布:如何清除手机其它数据 编辑:程序博客网 时间:2024/06/15 03:31
一、概念
简单工厂模式是创建型设计模式,它根据你传入工厂的参数来确定具体实现哪个对象(比如在工厂里面要做一件事,你将一台机器的名字传进来,工厂就能根据这个参数来找到对应的机器来处理要做的事情)
二、目的
帮我们把对象实例化的部分提取出来,进而优化系统架构,更好的体现开闭原则(可以帮我们忽略实例化的过程)
三、使用场景
在不确定会有多少个处理操作时应该考虑使用简单工厂模式,如针对同样的接收到的数据,处理的逻辑可能会不同,可能以后还会增加新的操作。
四、案例
实现计算器的功能时,对于同样的输入数据,可能执行加、减、乘、除,甚至其他的功能。因此可以抽象出一个操作的抽象类或是接口,提供一个统一的处理方法(此处为getResult),然后每种操作创建出一个子类出来。而判断具体使用哪个具体的实现类是在工厂类中进行判断的(将存放操作的变量传递给工厂的生产方法)。工厂类始终返回的是这个抽象类,这样如果对原有功能进行更改或是新添加新的功能,也不会对原来的其他类做修改,只编译修改的那个类或是新的类就可以了。
这样就做到了把耦合降到最低,同时也便于维护。
注意:如果客户提出要再添加一个功能来处理这些数据,实现起来就灰常方便了
实现代码:
此方法中定义好解决的方法如getResult(没有逻辑)
public class Operation { public double NumberA; public double NumberB; //此处省去getter和setter public double getResult(){ return 0.0; }}
加法运算类
public class OperationAdd extends Operation {public double getResult(){ return NumberA+NumberB; }}
减法运算类
public class OperationSub extends Operation { public double getResult(){ return NumberA-NumberB; }}
工厂类
public class OperationFactory { public static Operation createOperate(String operate){ Operation o = null; //根据传入参数的不同创建不同的对象并且向上转型为Operation类 switch(operate){ case "+": o = new OperationAdd(); break; case "-": o = new OperationSub(); break; } return o; }}
展示类
public static void main(String[] args) { // TODO Auto-generated method stub Operation oper = OperationFactory.createOperate("+"); oper.NumberA =3; oper.NumberB =5; System.out.println(oper.getResult()); }
思考:假设现在业务需求有变动,需要新增一个乘法的操作。那么就只需要新增一个乘法类继承Operation类,并且在工厂类中的switch新增一个case就可以了
个人总结:适合用于生成同一等级中的任何产品,但是当产品增多的时候,对系统的扩展和维护不利。不过这些都会在工厂方法模式中得到改善
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- 素数判定的常用 【在线 or 离线】
- java 中常用的类
- 编写java程序151条建议读书笔记(20)
- Mysql-python环境配置(centos)
- (六)北斗定位和伽利略定位
- 简单工厂模式
- 树莓派、 Arduino 、传统单片机开发板该如何选择?
- PHP Interpreter is not configured(浏览器502 bad gateway)
- Send a Table UVA
- 算法导论34--区间树(Python)
- 导入到myeclipse的项目报错或者是乱码问题
- java中泛型
- 剑指Offer面试题31连续子数组的最大和,面试题32从1到n整数中1出现的次数
- 深度学习工作站搭建全过程