我们可能不知道我们要预先创建什么样的对象。有些对象只能在用户请求以后执行时才被创建。例如:用户可以点击一个特定的按钮,创建一个对象。用户可以创建几个不同类型的新的文件。如果用户启动一个网页浏览器,该浏览器不事先知道有多少标签页(其中的每个选项卡是一个对象)将被打开。
为了解决这个问题,我们可以使用工厂方法模式。这样做是为了有一个函数,工厂接受一个输入字符串,并输出一个对象。因此,工厂返回对象。
obj = Car.factory("Racecar") obj.drive()
对象的类型取决于指定的输入字符串类型。这种技术可以使程序更容易扩展。新的程序员可以很容易地通过添加一个新的字符串和类添加功能,而不必阅读所有的源代码。
完整的代码:
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.") # Create object using factory. obj = Car.factory("Racecar") obj.drive()
结果输出:
Racecar driving.