用策略模式编写四则运算
时间: 2024-01-24 15:43:04 浏览: 22
首先,我们需要定义一个操作接口 `Operation`,它包含一个方法 `getResult`,用于计算运算结果。
```java
public interface Operation {
int getResult(int num1, int num2);
}
```
然后,我们需要实现该接口的具体操作类,包括加法、减法、乘法和除法。
```java
public class AddOperation implements Operation {
@Override
public int getResult(int num1, int num2) {
return num1 + num2;
}
}
public class SubtractOperation implements Operation {
@Override
public int getResult(int num1, int num2) {
return num1 - num2;
}
}
public class MultiplyOperation implements Operation {
@Override
public int getResult(int num1, int num2) {
return num1 * num2;
}
}
public class DivideOperation implements Operation {
@Override
public int getResult(int num1, int num2) {
if (num2 == 0) {
throw new IllegalArgumentException("除数不能为0!");
}
return num1 / num2;
}
}
```
接下来,我们需要定义一个上下文类 `Calculator`,它包含一个操作接口 `Operation`的引用变量 `operation`,以及一个方法 `calculate`,用于执行运算。
```java
public class Calculator {
private Operation operation;
public Calculator(Operation operation) {
this.operation = operation;
}
public int calculate(int num1, int num2) {
return operation.getResult(num1, num2);
}
}
```
最后,我们可以通过创建不同的操作类和上下文类,来实现不同的运算。
```java
public class Test {
public static void main(String[] args) {
// 加法运算
Calculator calculator1 = new Calculator(new AddOperation());
System.out.println(calculator1.calculate(2, 3)); // 输出 5
// 减法运算
Calculator calculator2 = new Calculator(new SubtractOperation());
System.out.println(calculator2.calculate(5, 3)); // 输出 2
// 乘法运算
Calculator calculator3 = new Calculator(new MultiplyOperation());
System.out.println(calculator3.calculate(2, 3)); // 输出 6
// 除法运算
Calculator calculator4 = new Calculator(new DivideOperation());
System.out.println(calculator4.calculate(6, 3)); // 输出 2
System.out.println(calculator4.calculate(6, 0)); // 抛出 IllegalArgumentException 异常
}
}
```
通过使用策略模式,我们可以方便地添加新的操作类,同时也可以避免使用大量的条件语句。
相关推荐
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)