原文: https://pythonspot.com/factory-method/

我们可能并不总是知道我们要预先创建什么样的对象。
在用户请求执行后,只在执行时创建某些对象。

可能使用工厂方法的示例:

  • 用户可以单击创建对象的特定按钮。

  • 用户可以创建几个不同类型的新文档。

  • 如果用户启动 Web 浏览器,则浏览器不会事先知道将打开多少个选项卡(每个选项卡都是一个对象)。

工厂方法模式

为了解决这个问题,我们可以使用工厂方法模式。这个想法是要有一个函数,即工厂,该函数接受一个输入字符串并输出一个对象。

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

关键事实:工厂方法返回(新)对象。

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

工厂方法示例

下面的示例演示了工厂方法。工厂方法(命名为factory)将根据输入返回这两种类型的新对象。

  1. class Car(object):
  2. def factory(type):
  3. if type == "Racecar":
  4. return Racecar()
  5. if type == "Van":
  6. return Van()
  7. factory = staticmethod(factory)
  8. class Racecar(Car):
  9. def drive(self):
  10. print("Racecar driving.")
  11. class Van(Car):
  12. def drive(self):
  13. print("Van driving.")
  14. # Create object using factory.
  15. obj = Car.factory("Racecar")
  16. obj.drive()

输出:

  1. Racecar driving.

下载练习