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.