工廠方法模式

2021-08-01 19:35:00 字數 1848 閱讀 8338

一、概念

定義乙個建立產品物件的工廠介面,讓子類決定例項化哪乙個類,將實際建立工作推遲到子類當中。(和簡單工廠不同,工廠方法不直接建立物件,而是在它的下面部門也就是子類來建立)

二、應用場景

不管是簡單工廠模式,工廠方法模式還是抽象工廠模式,他們具有類似的特性,所以他們的適用場景也是類似的。

1、作為一種建立類模式,在任何需要生成複雜物件的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜物件適合使用工廠模式,而簡單物件,特別是只需要通過new就可以完成建立的物件,無需使用工廠模式。如果使用工廠模式,就需要引入乙個工廠類,會增加系統的複雜度。

2、工廠模式是一種典型的解耦模式,迪公尺特法則在工廠模式中表現的尤為明顯。假如呼叫者自己組裝產品需要增加依賴關係時,可以考慮使用工廠模式。將會大大降低物件之間的耦合度。

3、由於工廠模式是依靠抽象架構的,它把例項化產品的任務交由實現類完成,擴充套件性比較好。也就是說,當需要系統有比較好的擴充套件性時,可以考慮工廠模式,不同的產品用不同的實現工廠來組裝。

小結:對於某個產品,呼叫者清楚地知道應該使用哪個具體工廠服務,例項化該具體工廠,生產出具體的產品來。子類的數量不固定,隨時可能有新的功能子類出現

三、案例

獲取貓和狗。首先通過工廠生產貓和狗,那麼按照工廠方法模式,就先將工廠定義為介面,而在分別定義貓工廠和狗工廠來實現該介面,例項化貓和狗的動作就在這兩個子工廠裡進行。

**:定義動物類

public

class animal ;

public

void

eat(){};

}

分別定義貓和狗來繼承動物類

public

class

dogextends

animal

public

void

eat()

}

public

class

catextends

animal

public

void

eat()

}

定義工廠介面,只定義建立動物方法,但不寫具體實現

public

inte***ce ifactory

分別定義貓工廠和狗工廠來實現該介面

public

class

dogfactory

implements

ifactory

}

public

class

catfactory

implements

ifactory

}

測試類

public

class main

}

反思:如果以後要新增獲取倉鼠的功能,那麼只需要定義乙個倉鼠類來實現工廠介面就可以了。無論是靈活性還是穩定性都得到了極大的提高。

優點:工廠方法去除了條件分支(解除了工廠類與分支的耦合),解決了簡單工廠對修改開放的問題。

缺點:工廠方法模式實現時,客戶端需要決定例項化哪個工廠來實現對具體產品的構建,選擇判斷依然存在,也就是說,工廠方法模式將簡單工廠的邏輯判斷交給客戶端去處理。對簡單工廠模式來說,增加功能是要修改工廠類的;但對工廠方法模式,修改的是客戶端。

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

工廠方法模式(一) 簡單工廠方法模式

ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...