我們可能不知道我們要預先創建什麼樣的對象。有些對象隻能在用戶請求以後執行時才被創建。例如:用戶可以點擊一個特定的按鈕,創建一個對象。用戶可以創建幾個不同類型的新的文件。如果用戶啟動一個網頁瀏覽器,該瀏覽器不事先知道有多少標簽頁(其中的每個選項卡是一個對象)將被打開。
為了解決這個問題,我們可以使用工廠方法模式。這樣做是為了有一個函數,工廠接受一個輸入字符串,並輸出一個對象。因此,工廠返回對象。
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.