(一)简单工厂模式
目标:设计一个计算器程序
思路:先定义一个操作父类,存放运算数据,抽象一个返回结果的运算方法。再用不同的操作方式(如加、减、乘、除)继承父类,各自实现运算方法。最后定义定一个工厂类,通过传入不同的运算符来实例化相应的操作类。
优点:易于拓展,当有新的操作需要实现时,只需要实现新的操作类,并在工厂类中增加实例化方法。当需要修改时,也只需要聚焦于相应的操作类,不同关心其他运算方法。
实现代码入下。
抽象父类Operation.java
public abstract class Operation {
private double numberA;
private double numberB;
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;
}
public abstract double getResult();
}
加法运算OperationAdd.java
public class OperationAdd extends Operation {
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
减法运算OperationSub.java
public class OperationSub extends Operation {
@Override
public double getResult() {
return getNumberA() - getNumberB();
}
}
乘法运算OperationMul.java
public class OperationMul extends Operation {
@Override
public double getResult() {
return getNumberA() * getNumberB();
}
}
除法运算OperationDiv.java
public class OperationDiv extends Operation {
@Override
public double getResult() {
if (getNumberB() == 0) {
throw new RuntimeException("除数不能为0");
}
return getNumberA() / getNumberB();
}
}
工厂类OperationFactory.java
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;
}
}
测试
public class Test {
public static void main(String[] args) throws Exception {
Operation oper;
double result;
oper = OperationFactory.createOperate("+");
oper.setNumberA(1);
oper.setNumberB(2);
result = oper.getResult();
oper = OperationFactory.createOperate("/");
oper.setNumberA(1);
oper.setNumberB(0);
result = oper.getResult();
}
}
参考资料:
《大话数据结构》

浙公网安备 33010602011771号