千家信息网

python工厂方法模式怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下python工厂方法模式怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、简介工厂模式是属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创
千家信息网最后更新 2026年11月01日python工厂方法模式怎么用

小编给大家分享一下python工厂方法模式怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、简介

工厂模式是属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象的过程中不会向客户端暴露实现逻辑,而是通过一个共同的接口类来指向新创建的对象。

二、工厂方法模式的主要角色

抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法newProduct()来创建产品。
具体工厂(ConcreteFactory):主要实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

三、简单工厂模式

内容:不直接向客户端暴露对象创建实现的细节,而是通过工厂类来负责创建产品类的实例。

具体代码(jiandan.py):

from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta):    @abstractmethod    def pay(self):        pass class WechatPay(Payment):    def pay(self, money):        print("微信支付%s" % money)        return class Alipay(Payment):    def __init__(self, huabei=False):        self.huabei = huabei    def pay(self, money):        if self.huabei:            print("花呗支付%s" % money)        else:            print("支付宝余额支付%s" % money) class PaymentFactory:    def create_pay(self, method):        if method == "wechat":            return WechatPay()        elif method == "alipay":            return Alipay()        elif method == "huabei":            return Alipay(huabei=True)        else:            raise TypeError("No such payment name %s" % method) # clientpf = PaymentFactory()p = pf.create_pay("huabei")p.pay(100)

结果:

ABCMeta是python的一个元类,用于在Python程序中创建抽象基类,抽象基类中声明的抽象方法,使用abstractmethod装饰器装饰。

简单明了的说:创建一个公共的抽象类,然后创建多个支付的类继承这个抽象类,各种支付类里实现具体的支付方式,通过工厂类选择支付方式,这样客服端只实现支付方式,不需要知道具体的实现方法。

优点:

隐藏了对象创建的实现细节客户端不需要修改代码

缺点:

违反了单一职责原则,将创建逻辑集中到一个工厂类里当添加新产品时,需要修改工厂类代码,违反了开闭原则

四、工厂模式

内容:定义了一个用于创建对象的接口(工厂类),让工厂子类决定实例化哪一个产品类。

具体代码(factory_method.py):

from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta):    @abstractmethod    def pay(self):        pass class WechatPay(Payment):    def pay(self, money):        print("微信支付%s" % money)        return class Alipay(Payment):    def __init__(self, huabei=False):        self.huabei = huabei    def pay(self, money):        if self.huabei:            print("花呗支付%s" % money)        else:            print("支付宝余额支付%s" % money) class PaymentFactory(metaclass=ABCMeta):    @abstractmethod    def create_method(self):        pass class AlipayFactory(PaymentFactory):    def create_method(self):        return Alipay() class WechatFactory(PaymentFactory):    def create_method(self):        return WechatPay() class HuabeiFactory(PaymentFactory):    def create_method(self):        return Alipay(huabei=True) pf = HuabeiFactory()p = pf.create_method()p.pay(100)

结果:

五、抽象工厂模式

内容:定义一个工厂类接口,让工厂子类来创建一系列相关或者相互依赖的对象。

与工厂模式相比,抽象工厂模式中的每一个产品都生产一套产品。

具体代码(abstract_factory.py):

from abc import ABCMeta, abstractmethod"""抽象产品""" class PhoneShell(metaclass=ABCMeta):    @abstractmethod    def show_shell(self):        pass class OS(metaclass=ABCMeta):    @abstractmethod    def show_os(self):        pass class CPU(metaclass=ABCMeta):    @abstractmethod    def show_cpu(self):        pass # 抽象工厂class PhoneFactory(metaclass=ABCMeta):    @abstractmethod    def make_shell(self):        pass    @abstractmethod    def make_cpu(self):        pass    @abstractmethod    def make_os(self):        pass # 具体产品class SmallShell(PhoneShell):    def show_shell(self):        print("普通手机壳小手机壳") class BigShell(PhoneShell):    def show_shell(self):        print("普通手机壳大手机壳") class AppleShell(PhoneShell):    def show_shell(self):        print("苹果手机壳") class SnapDragonCPU(CPU):    def show_cpu(self):        print("骁龙CPU") class MediaTekCPU(CPU):    def show_cpu(self):        print("联发科CPU") class AppleCPU(CPU):    def show_cpu(self):        print("苹果CPU") class AppleOS(OS):    def show_os(self):        print("苹果OS系统") class AndroidOS(OS):    def show_os(self):        print("Android系统") class IOS(OS):    def show_os(self):        print("IOS系统") # 具体工厂class MiFactory(PhoneFactory):    def make_cpu(self):        return SnapDragonCPU()    def make_os(self):        return AndroidOS()    def make_shell(self):        return BigShell() class HuaweiFactory(PhoneFactory):    def make_cpu(self):        return MediaTekCPU()    def make_os(self):        return AndroidOS()    def make_shell(self):        return SmallShell() class IPhoneFactory(PhoneFactory):    def make_cpu(self):        return AppleCPU()    def make_os(self):        return AppleOS()    def make_shell(self):        return AppleShell() class Phone:    def __init__(self, cpu, os, shell):        self.cpu = cpu        self.os = os        self.shell = shell    def show_info(self):        print("手机信息:")        self.cpu.show_cpu()        self.os.show_os()        self.shell.show_shell() def make_phone(factory):    cpu = factory.make_cpu()    os = factory.make_os()    shell = factory.make_shell()    return Phone(cpu, os, shell) p1 = make_phone(MiFactory())p1.show_info()

结果:

优点:

将客户端与类的具体实现相分离每个工厂创建了一个完整的产品系列,使得易于交换产品系列有利于产品的一致性(及产品之间的约束关系)

缺点:

难以支持新种类的抽象产品

看完了这篇文章,相信你对"python工厂方法模式怎么用"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

工厂 产品 支付 模式 方法 对象 代码 接口 客户 客户端 手机 方式 内容 手机壳 系统 结果 苹果 普通 之间 产品系列 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 互联网科技股 广东猪兼强互联网科技有限公司 科技赋能下的互联网金融 互联网科技有限公司图片 互联网巨头科技公司 互联网与未来科技 腾讯科技 互联网女皇 互联网 视角下的科技创新 互联网为啥属于高科技 燊美集互联网科技有限公司 互联网科技大赛获奖感言 华中科技大学互联网的牛人 互联网第三次科技革命特征 广州有谷有贝互联网科技有限公司 陕西九四连强互联网科技有限公司 北京军民互联网科技公司 深圳互联网科技园地址 河南商务圈互联网科技有限公司 科技互联网专业务虚会材料 湖南永感互联网科技有限公司 科技信息互联网 成都狮子座互联网科技 小米互联网科技园设置 荆州市昕露互联网络科技有限公司 互联网科技扶贫时间 信承诺互联网科技有限公司 抖集互联网科技技术咨询 兰石爱特工业互联网科技分公司 互联网科技对化妆品行业
0