工廠方法模式
基本原理
含義
工廠方法模式又稱為工廠模式、多型工廠模式和虛擬構造器模式。
通過定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件。
解決的問題
即簡單工廠模式的缺點
工廠一旦需要生產新產品就需要修改工廠類的方法邏輯,違背了“開放 - 關閉原則
言外意:
工廠標準有了,產品標準有了,要想生產新的商品,需要開闢新的工廠生產新的商品。
雖然解決了簡單工廠模式的“開閉原則”問題,但同時增加了額外開銷。
簡單工廠模式 是一個單一的工廠,如果需要提供新的產品,需要將工廠進行改造,
可以認為需要擴充套件一條流水線. 資源利用率的把控 凡事皆有度。
組成部分
組成 | 關係 | 作用 |
---|---|---|
產品標準 | 具體產品的父類 | 描述產品的公共介面 |
具體產品 | 產品標準的具體實現類 | 描述生產的具體產品 |
工廠標準 | 具體工廠的父類 | 描述工廠的公共介面 |
具體工廠 | 工廠標準的具體實現類 | 描述生產的具體產品的工廠 |
UML類圖
使用步驟
- 建立產品標準 (描述產品的公共介面)
- 建立具體產品類 (描述生產的具體產品)
- 建立工廠標準(描述工廠的公共介面)
- 建立具體工廠類(描述生產的具體產品的工廠)
- 外界通過呼叫具體工廠類的方法,從而建立不同具體產品類的例項
優點
- 更符合開-閉原則
新增一種產品時,只需要增加相應的具體產品類和相應的工廠子類即可
- 符合單一職責原則
每個具體工廠類只負責建立對應的產品
缺點
新增新產品時,除了增加新產品類外,還要提供與之對應的具體工廠類,系統類的個數將成對增加,在一定程度上增加了系統的複雜度;
同時,有更多的類需要編譯和執行,會給系統帶來一些額外的開銷;
雖然保證了工廠方法內的對修改關閉,但對於使用工廠方法的類,如果要更換另外一種產品,仍然需要修改例項化的具體工廠類;
一個具體工廠只能建立一種具體產品
適用場景
- 當一個類不知道它所需要的物件的類時
在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可;
- 當一個類希望通過其子類來指定建立物件時
在工廠方法模式中,對於抽象工廠類只需要提供一個建立產品的介面,而由其子類來確定具體要建立的物件,
利用物件導向的多型性和里氏代換原則,在程式執行時,子類物件將覆蓋父類物件,從而使得系統更容易擴充套件。
- 靈活配置
將建立物件的任務委託給多個工廠子類中的某一個,客戶端在使用時可以無須關心是哪一個工廠子類建立產品子類,
需要時再動態指定,可將具體工廠類的類名儲存在配置檔案或資料庫中。
總結
盡信書不如無書,任何脫離實際業務的架構都是在耍流氓;
所謂原則,只是為了更好地為我們服務;
具體如何應用需要我們在業務實踐中靈活把控。