设计模式-工厂模式
from abc import ABCMeta, abstractclassmethod # 接口 class Pay(metaclass=ABCMeta): @abstractclassmethod def pay(self, money): pass # 称Alipay实现了pay接口 class AliPay(Pay): def __init__(self, huabei=False): self.huabei = huabei def pay(self, money): if not self.huabei: print("支付余额支付%d" % money) else: print("支付宝花呗支付%d" % money) class WechatPay(Pay): def pay(self, money): print("微信支付%d" %money) class BankPay(Pay): def pay(self, money): print('银行卡支付%d' % money) # 定义一个创建支付对象的接口(一个工厂,约束具体工厂的实现) class PaymentFacatory(metaclass=ABCMeta): @abstractclassmethod def creat_payment(self): pass class Alipayment(PaymentFacatory): def creat_payment(self): return AliPay() class AlipayYuEment(PaymentFacatory): def creat_payment(self): return AliPay(huabei=True) class WechatPayment(PaymentFacatory): def creat_payment(self): return WechatPay() class BankPayment(PaymentFacatory): def creat_payment(self): return BankPay() WechatPayment().creat_payment()
优点:
每个具体产品都对应有一个具体工厂类,不需要修改工厂类代码
隐藏了对象创建的具体实现细节
缺点:
每增加一个具体产品类,就必须增加一个相应的具体工厂类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?