Python 工厂方法

我们可能并不总是知道我们想要提前创建什么类型的对象。

某些对象*只能*在用户请求后的执行时创建。

你可以使用工厂方法的应用场景如下 :

  • 用户可以点击创建对象的特定按钮。
  • 用户可以创建几个不同类型的新文档。
  • 如果用户启动 web 浏览器,则浏览器不会预先知道将打开多少个选项卡(每个选项卡都是对象)。

Python 工厂方法模式

为了解决这个问题,我们可以使用*工厂方法*模式。

我们的想法是拥有一个函数,即 factory,它接受一个输入字符串并输出一个对象。

obj = Car.factory("Racecar")
obj.drive()

**关键注意点 : 工厂方法返回(新)对象。

对象的类型取决于你指定的输入字符串的类型。这种技术可以使你的程序更容易扩展。新程序员可以通过添加新的字符串和类轻松添加功能,而无需阅读所有源代码。

工厂方法示例

下面的示例演示了一种工厂方法。工厂方法 factory 根据输入返回任一类型的新对象。

class Car(object):
 
    def factory(type):
        if type == "Racecar": 
            return Racecar()
        if type == "Van": 
            return Van()
        assert 0, "Bad car creation: " + type
 
    factory = staticmethod(factory)
 
class Racecar(Car):
    def drive(self): print("Racecar driving.")
 
class Van(Car):
    def drive(self): print("Van driving.")
 obj = Car.factory("Racecar")
obj.drive()

输出:

Racecar driving.