描述
学习笔录,不足之处大神多多指教。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
代码
计算器功能
1.父类
public interface Operation {
/**
* 获取结果
*
* @param num1
* @param num2
* @return
*/
BigDecimal getResult(BigDecimal num1, BigDecimal num2) throws Exception;
}
2.加、减、乘、除
public class OperationAdd implements Operation {
@Override
public BigDecimal getResult(BigDecimal num1, BigDecimal num2) {
return num1.add(num2);
}
}
public class OperationSub implements Operation {
@Override
public BigDecimal getResult(BigDecimal num1, BigDecimal num2) {
return num1.subtract(num2);
}
}
public class OperationMul implements Operation {
@Override
public BigDecimal getResult(BigDecimal num1, BigDecimal num2) {
return num1.multiply(num2);
}
}
public class OperationDiv implements Operation {
@Override
public BigDecimal getResult(BigDecimal num1, BigDecimal num2) throws Exception {
if (num2.compareTo(new BigDecimal(0)) == 0) {
throw new Exception("除数不能为0");
}
return num1.divide(num2, 8, BigDecimal.ROUND_HALF_DOWN);
}
}
3、工厂
public class OperationFactory {
public static Operation createOperate(String operate) {
Operation operation = null;
switch (operate) {
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
}
return operation;
}
}
3、调用
public class SimpleFactory {
public static void main(String[] args) throws Exception {
Operation operation = null;
operation = OperationFactory.createOperate("+");
System.out.println(operation.getResult(new BigDecimal(11), new BigDecimal(12)));
operation = OperationFactory.createOperate("-");
System.out.println(operation.getResult(new BigDecimal(11), new BigDecimal(12)));
operation = OperationFactory.createOperate("*");
System.out.println(operation.getResult(new BigDecimal(11), new BigDecimal(12)));
operation = OperationFactory.createOperate("/");
System.out.println(operation.getResult(new BigDecimal(11), new BigDecimal(12)));
}
}
小心上面代码中的 Bug;我只知道这些代码是正确的,但没有试过。