简单工厂模式
需要谁,就是生产谁。
书中计算器例子,java代码实现。
1、首先是一个运算类,他有两个number属性,主要用于保存计算的前后数,然后有一个抽象方法gerResult(),用于得到结果,加减乘除都写成了运算类的子类。继承他后重写gerResult()方法,这样如果想要修改其中一个算法都不再需要提供其他方法的代码,提高代码的安全性。
2、创建OperationFactory工厂类,通过输入的运算符号来判断调用哪一个算法。
3、运算类
//运算类
public abstract class Operation {
// 输入的数字A
protected double numberA = 0;
// 输入的数字B
protected double numberB = 0;
// AB的运算结果
public abstract double getResult() throws Exception;
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
}
4、加减乘除子类
public class OperationAdd extends Operation {
@Override
public double getResult() {
double result =0;
result=getNumberA()+getNumberB();
return result;
}
}
public class OperationSub extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() - getNumberB();
return result;
}
}
public class OperationMul extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() * getNumberB();
return result;
}
}
public class OperationDiv extends Operation {
@Override
public double getResult() throws Exception {
double result = 0;
if (getNumberB() == 0) {
throw new Exception("除数不能为零.");
}
result = getNumberA() / getNumberB();
return result;
}
}
5、运算工厂类
public class OperationFactory {
public static Operation createOperation(String operate) {
Operation oper = null;
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
6、调用计算器程序
public class DoOperation {
public static void main(String[] args) {
Operation oper = null;
oper = OperationFactory.createOperation("/");
oper.setNumberA(4);
oper.setNumberB(2);
double result = 0;
try {
result = oper.getResult();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(result);
}
}