4、使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实现。
时间: 2024-10-17 18:14:58 浏览: 32
在设计这个程序时,我们可以采用工厂方法模式,这是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露其内部细节。在这个场景中,我们将创建一个运算符接口和一系列的具体运算实现类,然后通过工厂类来选择并创建相应的运算。
首先,我们画出UML类图:
1. **Operator** (运算符接口)
- 方法: operate(num1, num2)
2. **Addition** (加法类)
- 实现 Operator 接口
- 方法: operate() 返回 num1 + num2
3. **Subtraction** (减法类)
- 实现 Operator 接口
- 方法: operate() 返回 num1 - num2
4. **Multiplication** (乘法类)
- 实现 Operator 接口
- 方法: operate() 返回 num1 * num2
5. **Division** (除法类)
- 实现 Operator 接口
- 方法: operate() 返回 num1 / num2 (需要处理除数为0的情况)
6. **CalculatorFactory** (计算器工厂类)
- 方法: createOperator(String operator) 根据运算符返回对应的运算类实例
以下是按照类图编写的部分代码:
```java
// 运算符接口
public interface Operator {
double operate(double num1, double num2);
}
// 具体运算类
public class Addition implements Operator {
@Override
public double operate(double num1, double num2) {
return num1 + num2;
}
}
public class Subtraction implements Operator {
@Override
public double operate(double num1, double num2) {
return num1 - num2;
}
}
public class Multiplication implements Operator {
@Override
public double operate(double num1, double num2) {
return num1 * num2;
}
}
public class Division implements Operator {
@Override
public double operate(double num1, double num2) throws ArithmeticException {
if (num2 == 0) {
throw new ArithmeticException("Divisor cannot be zero");
}
return num1 / num2;
}
}
// 计算器工厂类
public class CalculatorFactory {
public static Operator createOperator(String operator) {
switch (operator) {
case "+":
return new Addition();
case "-":
return new Subtraction();
case "*":
return new Multiplication();
case "/":
return new Division();
default:
throw new IllegalArgumentException("Invalid operator");
}
}
}
```
用户可以这样使用:
```java
double result;
try {
String operator = getUserInput(); // 获取用户的输入
Operator calculator = CalculatorFactory.createOperator(operator);
result = calculator.operate(getNum1(), getNum2());
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
}
System.out.println("Result: " + result);
```
阅读全文