Python中工厂模式的实现小结

 更新时间:2023年11月01日 11:32:53   作者:迹忆客  
工厂模式是一种创建型设计模式,通过定义一个工厂类,将对象的实例化过程封装起来,本文主要介绍了Python中工厂模式的实现小结,具有一定的参考价值,感兴趣的可以了解一下

工厂设计模式属于创意设计模式范畴。 创建设计模式提供了许多对象创建技术,从而提高了代码的可重用性和灵活性。

工厂方法是一种创建对象而不指定其具体类的方法。

它以单个父类(抽象类或接口)定义对象的通用结构,而子类提供实例化对象的完整实现的方式提供抽象和多态性。

在Python中实现工厂方法

在下面的代码中,abc是一个代表抽象基类的包,我们从中导入了ABCMeta(用于声明抽象类)和abstractstaticmethod(用于声明抽象静态方法)。

我们定义了一个名为 Person 的通用抽象基类,具有一个抽象静态方法 person_type()。

具体的派生类将实现此方法。 然后我们从 Person 定义了两个派生类,分别名为 Student 和 Teacher。 这两个类都根据需要实现了抽象静态方法 person_type()。

我们声明了工厂方法 PersonFactory 负责在运行时根据用户的输入选择创建 Person 的对象(学生或教师)。

该类有一个静态方法 build_person(),它将 person 类型作为参数,并使用其名称(学生姓名或教师姓名)构造所需的对象。

示例代码:

#Python 3.x
from abc import ABCMeta, abstractstaticmethod
class Person(metaclass=ABCMeta):
    @abstractstaticmethod
    def person_type():
        pass
class Student(Person):
    def __init__(self, name):
        self.name=name
        print("Student Created:", name)
    def person_type(self):
        print("Student")
class Teacher(Person):
    def __init__(self, name):
        self.name=name
        print("Teacher Created:", name)
    def person_type(self):
        print("Teacher")
class PersonFactory:
    @staticmethod
    def build_person(person_type):
        if person_type == "Student":
            name=input("Enter Student's name: ")
            return Student(name)
        if person_type == "Teacher":
            name=input("Enter Teacher's name: ")
            return Teacher(name)
if __name__== "__main__":
    choice=input("Enter the Person type to create: ")
    obj=PersonFactory.build_person(choice)
    obj.person_type()

输出:

#Python 3.x
Enter the Person type to create: Teacher
Enter Teacher's name: Jhon
Teacher Created: Jhon
Teacher

Python 中工厂方法的优点

  • 它促进代码中的松散耦合。
  • 可以很容易地修改代码以实例化具有稍微不同特征的新对象,而不会干扰当前代码。
  • 它促进代码中的抽象和多态性。

Python 中工厂方法的缺点

  • 我们只能在属于同一类别且特征略有不同的对象时使用它。
  • 工厂设计模式增加了代码中类的总数。
  • 它降低了代码的可读性,因为由于抽象而隐藏了实现。

到此这篇关于Python中工厂模式的实现小结的文章就介绍到这了,更多相关Python 工厂模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python区块链范围结论及Genesis Block的添加教程

    Python区块链范围结论及Genesis Block的添加教程

    这篇文章主要为大家介绍了Python区块链范围结论及Genesis Block的添加,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python Flask-Login实现用户会话管理

    Python Flask-Login实现用户会话管理

    这篇文章主要介绍了Python Flask-Login实现用户会话管理过程,Flask-Login为Flask提供用户会话管理。它处理登录、注销和长时间记住用户会话等常见任务
    2022-12-12
  • Python基于Faker假数据构造库

    Python基于Faker假数据构造库

    这篇文章主要介绍了Python基于Faker假数据构造库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python实现二叉查找树实例代码

    python实现二叉查找树实例代码

    这篇文章主要介绍了python实现二叉查找树实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python-jwt用户认证食用教学的实现方法

    python-jwt用户认证食用教学的实现方法

    这篇文章主要介绍了python-jwt用户认证食用教学的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 在Python的Django框架中使用通用视图的方法

    在Python的Django框架中使用通用视图的方法

    这篇文章主要介绍了在Python的Django框架中使用通用视图的方法,同时提到了相关的安全问题,需要的朋友可以参考下
    2015-07-07
  • Python利用FFmpeg处理音视频的详细教程

    Python利用FFmpeg处理音视频的详细教程

    FFmpeg是一个功能强大的开源多媒体处理工具,能够处理几乎所有类型的音频和视频文件,在Python中,通过ffmpeg-python库,我们可以轻松地在Python脚本中调用FFmpeg的功能,本教程将详细介绍如何在Python中使用ffmpeg-python库,并通过实际案例展示其用法,需要的朋友可以参考下
    2024-08-08
  • Django跨域请求问题的解决方法示例

    Django跨域请求问题的解决方法示例

    这篇文章主要给大家介绍了关于Django跨域请求问题解决的相关资料,文中介绍的实现方法包括:使用django-cors-headers全局控制、使用JsonP,只能用于Get方法以及在views.py里设置响应头,只能控制单个接口,需要的朋友可以参考下
    2018-06-06
  • NumPy 数组属性的具体使用

    NumPy 数组属性的具体使用

    本文主要介绍了NumPy 数组属性的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python如何使用qrcode生成指定内容的二维码并在GUI界面显示

    Python如何使用qrcode生成指定内容的二维码并在GUI界面显示

    现在二维码很流行,大街小巷大小商品广告上的二维码标签都随处可见,下面这篇文章主要给大家介绍了关于如何使用qrcode生成指定内容的二维码并在GUI界面显示的相关资料,需要的朋友可以参考下
    2022-09-09

最新评论