简单工厂模式是什么?用来干啥?

设想一下,如果有很多个类,都是完成类似的工作。那么就可以写一个工厂类就像一个中间人一样,来帮助我们选择需要的类来创建对象,而不用我们自己去new,UML图如下:
image.png
比如要做一个计算器程序,需要设计加减乘除等运算类 和 去调用这些运算并显示结果的客户端类,可以创建一个工厂类
image.png


用简单工厂模式有什么好处呢?

工厂类可以通过逻辑判断,来决定在什么时候创建哪一个产品类的实例,这样客户端可以不用自己去new对象了。简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。外界与具体类隔离开来,偶合性低。明确区分了各自的职责和权力,有利于整个软件体系结构的优化


那么怎么使用简单工厂模式呢?

就上述设计计算器程序为例,**抽象接口及其实现类如下**

  1. //接口类
  2. public interface Operation{
  3. public double getResult(double numA,double numB);
  4. }
  5. //实现类
  6. public class OperationAdd implements Operation{
  7. //实现接口中的同名方法,这样客户端可以通过工厂类返回的向上转型的对象实例进行动态绑定调用具体方法
  8. public double getResult(double numA,double numB){
  9. return numA+numB;
  10. }
  11. }
  12. //其他实现类同理

工厂类如下

  1. public class OperationFactory{
  2. //简单工厂类中用静态方法,返回类型为抽象接口,通过多态得到不同对象的实例
  3. public static Operation createOperation(String operate){
  4. switch(operate){
  5. if operate.equals("+")
  6. return new OperationAdd();
  7. else if operate.equals("-")
  8. return new OperationSub();
  9. else if ...
  10. ...
  11. }
  12. }
  13. }

客户端代码如下

  1. //通过多态的向上转型和动态绑定,虽然是抽象接口的对象,但是可以使用具体实现类的具体方法
  2. Operator oper = OperatorFactory.getOperator("+");
  3. double result = oper.getResult(1,2);