设计模式:简单工厂模式
简单工厂模式
不直接向客户端暴露对象创建的实现细节,而通过一个工厂类来负责创建产品类的实例。
简单工厂模式的组成:
- 抽象产品(Abstract Product): 定义产品的接口,在这个例子中是
Payment
类。- 具体产品(Concrete Product): 实现抽象产品接口的类,在这个例子中是
Alipay
和WechatPay
。- 工厂(Factory): 一个负责创建具体产品实例的类,在这个例子中是
PaymentFactory
。
from abc import ABCMeta, abstractmethod
# Payment类是一个抽象产品角色,定义了支付方式的接口 pay。
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
# 具体产品角色,实现了Payment类的支付宝支付方式即pay方法。
class Alipay(Payment):
def __init__(self, use_huabei=False):
self.use_huabei = use_huabei
def pay(self, money):
if self.use_huabei:
print("花呗支付%d元。" % money)
else:
print("支付宝余额支付了%d元。" % money)
# 具体产品角色,实现了Payment类的微信支付方式即pay方法。
class WechatPay(Payment):
def pay(self, money):
print("微信支付了%d元." % money)
# PaymentFactory 是工厂 Factory 类角色 - 负责根据条件创建具体的支付方式 实例
class PaymentFactory:
def create_payment(self, method):
if method == "Alipay":
return Alipay()
elif method == "WechatPay":
return WechatPay()
elif method == "HuabeiPay":
return Alipay(use_huabei=True)
else:
raise TypeError(f"No such payment named {method}")
# Client -- 客户端调用 - 示范了如何使用工厂类来获取和使用支付方式实例
pf = PaymentFactory() # 创建PaymentFactory类实例并将其赋值给pf变量
# PaymentFactory 类通过 create_payment 方法根据传入的方法名称来决定创建哪种支付方式的实例
p = pf.create_payment("HuabeiPay")
p.pay(199)
示例代码解析
Payment
类是一个抽象产品,定义了支付的接口pay
。Alipay
和WechatPay
是具体产品,它们实现了Payment
类的pay
方法。PaymentFactory
是工厂类,负责根据不同的条件(这里是支付方式的名称)来创建并返回具体的产品实例。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!