策略模式替代if else 案例
时间: 2023-07-03 10:26:05 浏览: 126
JvaScript判断和循环
以下是一个简单的示例,说明如何使用策略模式来替代if else语句:
假设我们现在有一个计算器程序,能够对两个数字进行加、减、乘、除四种运算。如果我们使用if else语句来实现这个程序,代码可能如下所示:
```python
class Calculator:
def calculate(self, operation, num1, num2):
if operation == "add":
return num1 + num2
elif operation == "subtract":
return num1 - num2
elif operation == "multiply":
return num1 * num2
elif operation == "divide":
return num1 / num2
```
在这个代码中,我们使用了if else语句来根据不同的运算符执行不同的操作。如果我们想要添加更多的运算符,就需要修改calculate方法中的if else语句,这会导致代码变得越来越复杂和难以维护。
现在,我们可以使用策略模式来重构这个代码。首先,我们定义一个抽象的运算策略接口:
```python
class OperationStrategy:
def execute(self, num1, num2):
pass
```
然后,我们定义具体的加、减、乘、除策略类,它们都实现了这个接口:
```python
class AddStrategy(OperationStrategy):
def execute(self, num1, num2):
return num1 + num2
class SubtractStrategy(OperationStrategy):
def execute(self, num1, num2):
return num1 - num2
class MultiplyStrategy(OperationStrategy):
def execute(self, num1, num2):
return num1 * num2
class DivideStrategy(OperationStrategy):
def execute(self, num1, num2):
return num1 / num2
```
最后,在计算器类中,我们使用一个字典来存储不同运算符对应的策略对象,然后根据运算符从字典中获取对应的策略对象,从而执行相应的计算操作:
```python
class Calculator:
def __init__(self):
self.strategies = {
"add": AddStrategy(),
"subtract": SubtractStrategy(),
"multiply": MultiplyStrategy(),
"divide": DivideStrategy()
}
def calculate(self, operation, num1, num2):
strategy = self.strategies.get(operation)
if strategy is None:
raise ValueError("Invalid operation")
return strategy.execute(num1, num2)
```
在这个代码中,我们使用字典来将运算符与对应的策略对象进行映射。当需要添加新的运算符时,我们只需要添加一个新的策略类,并在字典中添加对应的映射关系即可,而不需要修改calculate方法。这样就避免了使用if else语句来处理不同的运算符,提高了代码的可读性、可维护性和可扩展性。
阅读全文