Python设计模式之简单工厂模式实例详解
需积分: 0 32 浏览量
更新于2020-09-19
收藏 74KB PDF AIGC 举报
### Python设计模式之简单工厂模式实例详解
#### 简介
简单工厂模式(Simple Factory Pattern)是一种常用的设计模式,它属于创建型模式之一。在简单工厂模式中,我们会定义一个工厂角色,这个角色负责根据传入的一个参数,决定应该实例化哪一个具体的类。简单工厂模式简化了客户端代码,使得客户端不再需要关心实例化的细节,只需要知道所使用的类名即可。
#### 简单工厂模式的概念与原理
简单工厂模式的核心在于定义了一个工厂类来负责创建其他类的实例,这些被创建的类通常都有一个共同的父类或接口。通过这种方式,可以将创建对象的过程封装起来,使得客户端无需关心具体的创建逻辑,提高了系统的灵活性和可扩展性。
#### 实现步骤
1. **定义一个抽象类**(如`Operation`):用于定义所有子类共有的接口或行为。
2. **创建具体类**(如`OperationAdd`, `OperationSub`, `OperationMul`, `OperationDiv`):这些类继承自抽象类,并实现了具体的业务逻辑。
3. **实现工厂类**(如`OperationFactory`):该类包含一个静态方法,根据传入的参数选择并返回一个具体的子类实例。
#### 示例代码解析
以下是对上述代码的详细解析:
```python
# 定义四则运算的父类
class Operation:
def __init__(self, number1=0, number2=0):
self.num1 = number1
self.num2 = number2
# 抽象方法,需要在子类中实现
def GetResult(self):
pass
# 加法运算类
class OperationAdd(Operation):
def GetResult(self):
return self.num1 + self.num2
# 减法运算类
class OperationSub(Operation):
def GetResult(self):
return self.num1 - self.num2
# 乘法运算类
class OperationMul(Operation):
def GetResult(self):
return self.num1 * self.num2
# 除法运算类
class OperationDiv(Operation):
def GetResult(self):
if self.num2 == 0:
return '除数不能为0'
return 1.0 * self.num1 / self.num2
# 其他操作符类
class OperationUndef(Operation):
def GetResult(self):
return '操作符错误'
# 简单工厂类
class OperationFactory:
def choose_oper(self, ch):
if ch == '+':
return OperationAdd()
elif ch == '-':
return OperationSub()
elif ch == '*':
return OperationMul()
elif ch == '/':
return OperationDiv()
else:
return OperationUndef()
# 主函数
if __name__ == "__main__":
while True:
num1 = float(input('请输入第一个数值: '))
oper = input('请输入一个四则运算符: ')
num2 = float(input('请输入第二个数值: '))
OF = OperationFactory()
oper_obj = OF.choose_oper(oper)
oper_obj.num1 = num1
oper_obj.num2 = num2
print('运算结果为:', oper_obj.GetResult())
```
#### 代码解释
- **抽象类** `Operation`: 定义了`GetResult`方法作为所有子类共有的接口。
- **具体类** (`OperationAdd`, `OperationSub`, `OperationMul`, `OperationDiv`, `OperationUndef`): 每个类都实现了`GetResult`方法,完成了具体的业务逻辑。
- **工厂类** `OperationFactory`: 包含`choose_oper`方法,根据传入的操作符返回相应的子类实例。
#### 优点
1. **降低耦合度**: 将产品类的实例化过程从客户端代码中剥离出来,降低了客户端与产品类之间的耦合度。
2. **提高灵活性**: 当需要增加新的产品类时,只需修改工厂类即可,无需修改客户端代码,符合开闭原则。
3. **简化客户端代码**: 客户端只需要知道所使用的类名,无需关心具体的创建逻辑。
#### 缺点
1. **工厂类过于臃肿**: 如果产品类较多,工厂类将会非常庞大,难以维护。
2. **违反开闭原则**: 当需要添加新的产品类时,虽然无需修改客户端代码,但需要修改工厂类。
#### 结论
简单工厂模式通过将对象的创建逻辑集中到一个单独的类中,使得客户端代码更加简洁,同时也提高了系统的灵活性。然而,当系统中的产品类过多时,简单工厂模式可能会导致工厂类变得过于复杂,这时可以考虑使用其他更高级的工厂模式(如工厂方法模式或抽象工厂模式)。

weixin_38666527
- 粉丝: 9