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 中工厂方法的缺点

  • 我们只能在属于同一类别且特征略有不同的对象时使用它。
  • 工厂设计模式增加了代码中类的总数。
  • 它降低了代码的可读性,因为由于抽象而隐藏了实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python工厂模式是一种创建对象的设计模式,它通过使用工厂方法来创建对象,而不是直接调用构造函数。工厂模式可以用于创建复杂的对象或者根据条件动态地创建不同类型的对象。 工厂模式的核心思想是将对象的创建逻辑封装在一个工厂,客户端只需要通过调用工厂类的方法来获取所需的对象,而不需要知道具体的创建细节。这种解耦合的设计使得客户端代码更加灵活和可维护。 下面是一个简单的示例,演示了在Python使用工厂模式创建不同类型的动物对象: ```python class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" class AnimalFactory: def create_animal(self, animal_type): if animal_type == "dog": return Dog() elif animal_type == "cat": return Cat() else: raise ValueError("Invalid animal type.") # 使用工厂创建动物对象 animal_factory = AnimalFactory() dog = animal_factory.create_animal("dog") cat = animal_factory.create_animal("cat") print(dog.speak()) # 输出: Woof! print(cat.speak()) # 输出: Meow! ``` 在这个例子,我们定义了一个基类 `Animal` 和两个子类 `Dog` 和 `Cat`,它们都实现了 `speak` 方法。然后我们创建了一个工厂类 `AnimalFactory`,它有一个方法 `create_animal`,根据传入的动物类型参数,返回相应的动物对象实例。 通过使用工厂模式,我们可以根据需要创建不同类型的动物对象,而不需要直接调用具体的构造函数。这种方式使得客户端代码与具体的动物类解耦合,增加了代码的灵活性和可维护性。如果需要添加新的动物类型,只需要在工厂进行相应的扩展,而不需要修改客户端代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迹忆客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值