3.编程实现运算类—工厂设计模式 【问题描述】 (1)定义抽象类Operation,有double型数据成员numberA、numberB,有抽象方法getResult() (2)定义Operation的4个子类,分别实现加、减、除运算,二个数的平均数运算 (3)定义类OperationFactory:有静态方法Operation createOperate(String operate); 根据形参operate的值创建相应加、减、除、平均值类的对象,赋给抽象类引用后返回 (4)定义测试类及主方法:用户从键盘输入运算数及运算符,根据运算符调用OperationFactory类的静态方法,创建相应实例,设置运算数,输出运行结果 【输入形式】 一个表达式(数据与运算符之间空格间隔) 【输出形式】 表达式运算的结果,保留3位小数 【样例输入】 表4.3实验题目3测试用例 序号 样例输入 样例输出 1 45.8 + 80.9 Result:126.700 2 100 / 3 Result:33.333 3 123 / 0 Devide by zero!
时间: 2024-01-22 18:21:05 浏览: 22
```java
import java.util.Scanner;
// 抽象类 Operation
abstract class Operation {
protected double numberA;
protected double numberB;
public abstract double getResult();
}
// 加法类
class AddOperation extends Operation {
public double getResult() {
return numberA + numberB;
}
}
// 减法类
class SubOperation extends Operation {
public double getResult() {
return numberA - numberB;
}
}
// 乘法类
class MulOperation extends Operation {
public double getResult() {
return numberA * numberB;
}
}
// 除法类
class DivOperation extends Operation {
public double getResult() {
if (numberB == 0) {
System.out.println("Devide by zero!");
return 0;
} else {
return numberA / numberB;
}
}
}
// 平均数类
class AverageOperation extends Operation {
public double getResult() {
return (numberA + numberB) / 2;
}
}
// 工厂类
class OperationFactory {
public static Operation createOperate(String operate) {
Operation operation = null;
switch (operate) {
case "+":
operation = new AddOperation();
break;
case "-":
operation = new SubOperation();
break;
case "*":
operation = new MulOperation();
break;
case "/":
operation = new DivOperation();
break;
case "avg":
operation = new AverageOperation();
break;
default:
System.out.println("Invalid operator!");
break;
}
return operation;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double numberA = scanner.nextDouble();
String operator = scanner.next();
double numberB = scanner.nextDouble();
Operation operation = OperationFactory.createOperate(operator);
if (operation != null) {
operation.numberA = numberA;
operation.numberB = numberB;
System.out.printf("Result:%.3f", operation.getResult());
}
}
}
```