简单工厂模式

来源:互联网 发布:如何清除手机其它数据 编辑:程序博客网 时间: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就可以了

个人总结:适合用于生成同一等级中的任何产品,但是当产品增多的时候,对系统的扩展和维护不利。不过这些都会在工厂方法模式中得到改善