設計模式之工廠方法模式

2021-09-02 15:09:43 字數 1863 閱讀 7759

工廠模式屬於建立型設計模式,它提供了一種建立物件的最佳方式。

定義:定義了乙個建立產品物件的工廠介面,將實際建立工作推遲到子類工廠當中。

問題描述:簡單工廠模式中,只要新增新的產品類,就得去修改工廠類,這樣做勢必違反了開閉原則。

解決方案:新增抽象工廠類,讓抽象產品對應抽象工廠,讓具體產品對應具體工廠,實際的建立工作推遲到子類工廠中去做。

結構圖

說明:(1)抽象工廠角色:是工廠方法模式的核心,任何在模式中建立物件的工廠類必須實現這個介面。

(2)具體工廠角色:實現抽象工廠介面的具體工廠類,用於建立具體產品物件。

(3)抽象產品角色:具體產品物件的共同父類或共同擁有的介面。

(4)具體產品角色:實現抽象產品介面的具體產品類,包含產品的具體細節。

舉個栗子:依舊是那個我養寵物的故事,故事的情節優化了一下。

將animalfactory改為抽象工廠類,包含乙個getanimal()方法,並新增dogfactory和catfactory兩個具體工廠類,均實現抽象工廠定義的工廠方法,返回其對應的具體產品類。具體實現方式如下:

1. 在簡單工廠模式的**的基礎上,將類animalfactory改為抽象工廠類,幷包含乙個getanimal()方法。**如下:

2. 新增dogfactory和catfactory兩個具體工廠類,均實現animalfactory介面中的方法,返回相應的具體產品類物件。**如下:

3. 在類factorymethodfragment中,具體工廠類對應具體產品類。**如下:

4. 執行後的結果,如下所示:

綜上所述,核心工廠類不再負責產品的建立工作,讓它成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品,完全遵守了開閉原則,提高了可擴充套件性。在這個模式中,工廠類和產品類往往一一對應,即乙個抽象工廠對應乙個抽象產品,乙個具體工廠對應乙個具體產品,這個具體的工廠就負責生產對應的產品。

優點

(1)利用工廠的工廠方法類去建立具體的產品物件,隱藏了具體產品物件的建立細節,只需要關心具體產品對應的具體工廠;

(2)遵守開閉原則。加入新的產品類時,只需要同時加入工廠類就可以實現擴充套件,無需修改原來的**。

缺點

隨著產品種類的數量的增長,工廠類也會隨之增加,將不利於系統的維護,增加系統編譯和執行的開銷。

適用場景

(1)對於某個產品,呼叫者清楚地知道應該使用哪個具體的工廠來服務,例項化該具體工廠,生產出具體的產品來;

(2)只是需要一種產品,而不想知道也不需要知道工廠是如何生產出來的,自需要知道具體對應的工廠就行。

設計模式 工廠模式之工廠方法模式

工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...

設計模式之工廠方法模式

package com.csair.design.pattern 工廠方法,有抽象基類,每個子類生產乙個具體物件,與抽象工廠的關係是,抽象工廠生產多個產品 產品有某種內在聯絡 工廠方法只生產乙個物件 author ppt public class factorymethod public stati...

設計模式之工廠方法模式

在介紹工廠方法模式之前,先來介紹一下簡單工廠。什麼是簡單工廠?在類中,難免要例項化一些類,那麼我們把這些類的例項化抽離出來封裝成乙個工廠類,工廠類提供乙個公共的靜態或非靜態的方法來返回其他物件所需要的物件。這樣做的目的就是將物件的例項化與邏輯 分開,提高 的復用能力。這就是簡單工廠。public a...