工廠方法模式是一種常用的類別創建型設計模式,此模式的核心精神是封裝類別中變化的部分,提取其中個性化善變的部分為獨立類,透過依賴注入以達到解耦、復用和方便後期維護拓展的目的。
模式簡介:
#工廠方法(Factory Method)模式的意義是定義一個建立產品物件的工廠接口,將實際創建工作推遲到子類當中。核心工廠類別不再負責產品的創建,這樣核心類別成為一個抽象工廠角色,僅負責具體工廠子類別必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。
工廠方法模式是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。首先完全實現‘開-閉 原則’,實現了可擴展。其次更複雜的層次結構,可以應用在產品結果複雜的場合。 [2]
工廠方法模式對簡單工廠模式進行了抽象化。有一個抽象的Factory類別(可以是抽象類別和介面),這個類別將不再負責特定的產品生產,而是只制定一些規範,具體的生產工作由其子類別去完成。在這個模式中,工廠類別和產品類別往往可以依序對應。即一個抽象工廠對應一個抽象產品,一個具體工廠對應一個特定產品,這個特定的工廠就負責生產對應的產品。
工廠方法模式(Factory Method pattern)是最典型的模板方法模式(Template Method pattern)應用。
角色結構:
抽象工廠(Creator)角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類別必須實作這個介面。
特定工廠(Concrete Creator)角色:這是實作抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。上圖中有兩個這樣的角色:BulbCreator與TubeCreator。
抽象產品(Product)角色:工廠方法模式所建立的物件的超類型,也就是產品物件的共同父類別或共同擁有的介面。在上圖中,這個角色是Light。
特定產品(Concrete Product)角色:這個角色實作了抽象產品角色所定義的介面。某具體產品有專門的具體工廠創建,它們之間往往一一對應。
模式應用:
工廠方法常用在下列兩種情況:
第一種情況是對於某個產品,呼叫者清楚知道應該使用哪個特定工廠服務,實例化該具體工廠,生產出具體的產品來。 Java Collection中的iterator() 方法即屬於這種情況。
第二種情況,只是需要一種產品,而不想知道也不需要知道究竟是哪個工廠為生產的,即最終選用哪個具體工廠的決定權在生產者一方,它們根據當前系統的情況來實例化一個特定的工廠回傳給使用者,而這個決策過程這對使用者來說是透明的。
以上是工廠方法模式是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!