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+opencv将图片生成视频的实例详解

    对Python+opencv将图片生成视频的实例详解

    今天小编就为大家分享一篇对Python+opencv将图片生成视频的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • PyQt5+python3+pycharm开发环境配置教程

    PyQt5+python3+pycharm开发环境配置教程

    这篇文章主要介绍了PyQt5+python3+pycharm开发环境配置教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • TensorFlow实现RNN循环神经网络

    TensorFlow实现RNN循环神经网络

    这篇文章主要介绍了TensorFlow实现RNN循环神经网络,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 10行Python代码就能实现的八种有趣功能详解

    10行Python代码就能实现的八种有趣功能详解

    Python凭借其简洁的代码,赢得了许多开发者的喜爱,因此也就促使了更多开发者用Python开发新的模块。面我们来看看,我们用不超过10行代码能实现些什么有趣的功能吧
    2022-03-03
  • PyCharm中New Directory 和 New Python Package的区别解析

    PyCharm中New Directory 和 New Python 

    python package这是一个特殊的目录,因为在创建该python package的时候,系统会自动地生成一个py文件, init.py,这篇文章主要介绍了PyCharm中New Directory 和 New Python Package的区别,需要的朋友可以参考下
    2023-12-12
  • python3中dict(字典)的使用方法示例

    python3中dict(字典)的使用方法示例

    这篇文章主要介绍了python3中dict(字典)的使用方法,文中给出了详细的功能列举,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Python中的QPixmap用法详解

    Python中的QPixmap用法详解

    QPixmap主要用于绘图,针对图像显示而最佳化设计,这篇文章主要介绍了Python中的QPixmap用法,对QPixmap使相关知识感兴趣的朋友一起看看吧
    2023-03-03
  • django model object序列化实例

    django model object序列化实例

    这篇文章主要介绍了django model object序列化实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Caffe数据可视化环境python接口配置教程示例

    Caffe数据可视化环境python接口配置教程示例

    这篇文章主要为大家介绍了Caffe数据可视化环境python接口配置教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 详解Python下载图片并保存本地的两种方式

    详解Python下载图片并保存本地的两种方式

    这篇文章主要介绍了Python下载图片并保存本地的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论