为什么顶尖AI团队都在用“双通道关键词提取法”?ChatGPT + 规则引擎协同架构首次公开披露
2026/7/12 13:46:49
在真实项目中,对象的创建往往比使用更复杂。
如果你发现代码中频繁出现if-else或根据参数去new不同的类,那基本已经到了该用工厂方法模式的时候了。
先看一个非常常见的写法:
defcreate_payment(pay_type):ifpay_type=="wechat":returnWeChatPay()elifpay_type=="alipay":returnAliPay()elifpay_type=="bank":returnBankPay()else:raiseValueError("unsupported pay type")问题很明显:
工厂方法模式的目的就是:
把“创建对象的逻辑”从使用对象的地方解耦出来。
**工厂方法模式(Factory Method)**的定义:
定义一个创建对象的接口,让子类决定实例化哪一个类。
核心思想:
fromabcimportABC,abstractmethodclassPayment(ABC):@abstractmethoddefpay(self,amount):passclassWeChatPay(Payment):defpay(self,amount):print(f"微信支付{amount}")classAliPay(Payment):defpay(self,amount):print(f"支付宝支付{amount}")classPaymentFactory:@staticmethoddefcreate(pay_type:str)->Payment:ifpay_type=="wechat":returnWeChatPay()ifpay_type=="alipay":returnAliPay()raiseValueError("unsupported pay type")使用方:
payment=PaymentFactory.create("wechat")payment.pay(100)上面的写法虽然集中管理了创建逻辑,但:
if-else真正的工厂方法强调:
通过继承扩展工厂,而不是修改工厂。
classPaymentFactory(ABC):@abstractmethoddefcreate(self)->Payment:passclassWeChatPayFactory(PaymentFactory):defcreate(self)->Payment:returnWeChatPay()classAliPayFactory(PaymentFactory):defcreate(self)->Payment:returnAliPay()使用方式:
factory=WeChatPayFactory()payment=factory.create()payment.pay(100)新增支付方式时:
Python 中,很多时候没必要写那么多类。
classPaymentFactory:_mapping={"wechat":WeChatPay,"alipay":AliPay,}@classmethoddefcreate(cls,pay_type:str)->Payment:try:returncls._mapping[pay_type]()exceptKeyError:raiseValueError("unsupported pay type")优点:
| 对比点 | 直接 new | 工厂方法 |
|---|---|---|
| 扩展性 | 差 | 好 |
| 解耦 | 低 | 高 |
| 可测试性 | 差 | 好 |
| 代码复杂度 | 低 | 中 |
适用原则:
解决方案:
👉 直接实例化即可。
工厂方法模式的核心价值在于:
在 Python 中: