简单工厂模式
不同类型下创建对应的不同的对象,得到不同的结果,就叫简单生产模式
比如
定义一个接口,叫A,里面有方法a,返回int类型
类B1实现A接口,也实现a方法,里面做的是加法运算
类B2实现A接口,也实现a方法,里面做的是减法运算
类B3实现A接口,也实现a方法,里面做的是乘法运算
类B4实现A接口,也实现a方法,里面做的是除法运算
定义一个类叫SimpleFactory,里面属性是A,有个方法叫cal
伪代码如下:
Class SimpleFactory{private A a;public static int cal(int type){if(type == 1){a = new B1();}else if(){a = new B2();}else if(){a = new B3();}else if(){a = new B4();}return a.a();}
}
这样调用后,只要确定type等于几,比如要算减法,type=2,
那么只要使用SimpleFactory.cal(2),就能得到对于计算的答案
由于cal方法一般都做成静态方法,所以简单工厂模式,有时也叫静态工厂模式。
优缺点
简单工厂类的优点就是简单实用。
缺点就是代码耦合大,如果要新增一个类,就需要在工厂类中新增,这样就是违背了开放-封闭原则了。
源码应用
其实很多地方都用到了简单工厂模式,比如JDK源码中有个类java.util.Calendar。
我们直接看源码:
静态方法getInstance()
这个说明getInstance()应该是一个默认的方法,其实真正的方法,是有两个参数的,一个是时区,一个是地区
下面红框这个,就是根据不同的入参,返回了不同的Calendar的子类,就是简单工厂模式。