一.定义:
也可以叫做是静态工厂方法,实质是工厂类根据传递进入的参数,决定生成哪一个类的产品。它是抽象工厂方法模式的一种简化。
二.优点:
调用者只需要知道要创建何种类型的产品,只需要传递相应的类型或者对应的约束,不必要知道对象是如何创建的,当需要增加新的产品时只需要实现相对应的接口就行,不需要更改其他地方的代码(通过约束来创建时需要更改工厂类中的工厂方法)。
三.缺点:
每次增加产品都要新增产品类,导致类增加,并且都需要去改动工厂方法中的代码违反了对修改关闭的设计原则
四.uml类图
五.实例:
数字操作符接口
/** * 计算器运算操作抽象类 * Created by hm on 16/10/17. */public abstract class OperatorInterface { /** * 运算操作数 * @param num 可变参数 */ public abstract int operator(int ...num);}
加法操作
/** * 加法运算 * Created by hm on 16/10/17. */public class AddOperator extends OperatorInterface { @Override public int operator(int... num) { int sum = 0; if(num.length != 0){ for (int a : num) { sum += a; } } return sum; }}
/** * 简单工厂方法创建运算操作实例 * Created by apple on 16/10/17. */public class OperatorFactory { public static final String OPERATOR_TYPE_ADD = "add"; /** * 通过反射来创建 在android中不推荐使用耗性能 * @param clazz * @param* @return */ public static T createOperatorByClazz(@NonNull Class clazz){ try{ return (T) clazz.newInstance();//使用反射耗性能 }catch (Exception e){ return null; } } /** * 通过约束字符串来创建 * @param type * @param * @return */ public static T createOperatorByClazz(String type){ OperatorInterface operatorInterface = null; switch (type){ case OPERATOR_TYPE_ADD: operatorInterface = new AddOperator(); break; default: break; } return (T) operatorInterface; }}