要求体现面向对象的思想
UML图:
为实现计算器小程序,我首先写了一个运算类,它有两个Number属性,主要用于计算器的前后数,然后有一个虚方法getResult(),用于得到结果,然后我把加减乘除都写成了运算器的子类,继承它后,重写了getResult()方法,这样如果要修改任何一个算法,就不需要提供其它算法的代码。
但是对于我如何让计算器知道用哪一个算法,其实就是如何去实例化对象的问题,即用一个单独的类OperationFactory来做这个创造实例的过程,这就是工厂。
public class Operation {
static double numberA;
static double numberB;
public static double getNumberA() {
return numberA;
}
public static void setNumberA(double numberA) {
Operation.numberA = numberA;
}
public static double getNumberB() {
return numberB;
}
public static void setNumberB(double numberB) {
Operation.numberB = numberB;
}
public double getResult() {
double result = 0;
return result;
}
}
加法类
public class OperationAdd extends Operation{
public double getResult(){
double result = 0;
result = numberA + numberB;
return result;
}
}
减法类
public class OperationSub extends Operation{
public double getResult(){
double result = 0;
result = numberA - numberB;
return result;
}
}
乘法类
public class OperationMul extends Operation{
public double getResult(){
double result = 0;
result = numberA * numberB;
return result;
}
}
除法类
public class OperationDiv extends Operation{
public double getResult(){
double result = 0;
result = numberA / numberB;
return result;
}
}
Operation类
简单运算工厂类
public class OperationFactory {
public static Operation createOperate(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;
}
}
Main类
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字A:");
double a = sc.nextDouble();
System.out.println("请输入运算符:");
String operator = sc.next();
System.out.println("请输入数字c:");
double c = sc.nextDouble();
Operation oper = OperationFactory.createOperate(operator);
oper.setNumberA(a);
oper.setNumberB(c);
System.out.println("结果:"+oper.getResult());
}
}
综上,我们体会到用设计模式使得程序更加的灵活,容易修改,并且易于复用。