定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
定义中最重要的一句话就是,由一个工厂对象决定创建出哪一种产品类的实例
感觉模式挺简单的直接上代码:
首先是工厂类,我在此用反射获取的运算类父类,主要是为了消除if-else,我是想不到其他方法消除,有其他方法欢迎大家留言:
/**
* 运算工厂
*
* @author
* @since 谷泽昊 2018年4月17日
*/
public class OperationFactory {
/**
* 初始化
*/
private static final Map<String, String> map = new HashMap<String, String>() {
/**
*
*/
private static final long serialVersionUID = 1L;
{
put("+", "com.gzh.OperationAdd");
put("-", "com.gzh.OperationSub");
put("*", "com.gzh.OperationMul");
put("/", "com.gzh.OperationDiv");
}
};
/**
* 简单工厂模式,通过反射获取父类
* @author
* @since 谷泽昊 2018年4月17日
* @param operation
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @throws ClassNotFoundException
*/
public static Operation createOperation(String operation) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
String oper = map.get(operation);
if(oper!=null){
return (Operation) Class.forName(oper).newInstance();
}
return null;
}
}
然后是加法类:
/**
* 加法运算
* @author
* @since 谷泽昊 2018年4月17日
*/
public class OperationAdd extends Operation{
@Override
public double getResult(double numberA, double numberB) throws ArithmeticException {
return numberA+numberB;
}
}
减法类:
/**
* 减法运算
*
* @author
* @since 谷泽昊 2018年4月17日
*/
public class OperationSub extends Operation {
@Override
public double getResult(double numberA, double numberB) throws ArithmeticException {
return numberA-numberB;
}
}
乘法类:
/**
* 乘法运算
* @author
* @since 谷泽昊 2018年4月17日
*/
public class OperationMul extends Operation{
@Override
public double getResult(double numberA, double numberB) throws ArithmeticException {
return numberA*numberB;
}
}
除法类:
/**
* 减法运算
*
* @author
* @since 谷泽昊 2018年4月17日
*/
public class OperationSub extends Operation {
@Override
public double getResult(double numberA, double numberB) throws ArithmeticException {
return numberA-numberB;
}
}
最后是main方法:
public class App {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Operation operationAdd = OperationFactory.createOperation("+");
try {
System.out.println(operationAdd.getResult(1, 2));
} catch (Exception e) {
e.printStackTrace();
}
Operation operationSub = OperationFactory.createOperation("-");
try {
System.out.println(operationSub.getResult(1, 2));
} catch (Exception e) {
e.printStackTrace();
}
Operation operationMul = OperationFactory.createOperation("*");
try {
System.out.println(operationMul.getResult(1, 2));
} catch (Exception e) {
e.printStackTrace();
}
Operation operationDiv = OperationFactory.createOperation("/");
try {
System.out.println(operationDiv.getResult(1, 0));
} catch (Exception e) {
e.printStackTrace();
}
}
这就是简单工厂模式。