Java 設計模式(工廠模式)

weixin_34185560發表於2018-11-26

繼續為大家介紹設計模式,今天帶來的是工廠模式。工廠顧名思義是生產產品的。使用工廠方法來建立物件,也可以

8207483-1213dde5744adb9e
8207483-a813a5bf0e83f3ad
8207483-e1528876b79e1430
8207483-ae92d6302db1c3a3
8207483-7f1b894085c71c80
8207483-bd99c9a21c36a0fb
8207483-bdc547273cda8e9a

簡單工廠模式的優點如下:

(1)工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪一個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅“消費”產品;簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件。

(2)客戶端無需知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量。

(3)通過引入配置檔案,可以在不修改任何客戶端程式碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

簡單工廠模式的缺點如下:

(1)由於工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。

(2)使用簡單工廠模式將會增加系統中類的個數,在一定程式上增加了系統的複雜度和理解難度。

(3)系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。

(4)簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。

8207483-95aeeb1d52a03e57
8207483-f93340d4090d8f39

工廠方法模式的優點如下:

(1)在工廠方法模式中,工廠方法用來建立客戶所需要的產品,同時還向客戶隱藏了哪種具體產品類將被例項化這一細節,使用者只需要關心所需產品對應的工廠,無需關心建立細節,甚至無需知道具體產品類的類名。

(2)基於工廠角色和產品角色的多型性設計是工廠方法模式的關鍵。它能夠使工廠可以自主確定建立何種產品物件,而如何建立這個物件的細節則完全封裝在具體工廠內部。工廠方法模式之所以又被稱為多型工廠模式,正是因為所有的具體工廠類都具有同一抽象父類。

(3)使用工廠方法模式的另一個優點是在系統中加入新產品時,無需修改抽象工廠和抽象產品提供的介面,無需修改客戶端,也無需修改其他的具體工廠和具體產品,而只要新增一個具體工廠和具體產品就可以了,這樣,系統的可擴充套件性也就變得非常好,完全符合“開閉原則”。

工廠方法模式的缺點如下:

(1)在新增新產品時,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,系統中類的個數將成對增加,在一定程度上增加了系統的複雜度,有更多的類需要編譯和執行,會給系統帶來一些額外的開銷。

(2)由於考慮到系統的可擴充套件性,需要引入抽象層,在客戶端程式碼中均使用抽象層進行定義,增加了系統的抽象性和理解難度,且在實現時可能需要用到DOM、反射等技術,增加了系統的實現難度。

8207483-f1882a4970605ffc
8207483-f4a95760ee3fc669
8207483-c0bba4f53853fc40
8207483-131654487c2c7738
8207483-3e28d2e92a1b695c
8207483-0804b7f1dbe52c6f

抽象工廠模式的優點

(1) 隔離了具體類的生成,使得使用者不需要知道什麼被建立了。

(2) 當一個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同一個產品族中的物件。

抽象工廠模式的缺點:

(1)新增新的產品對像時,難以擴充套件抽象工廠以便生產新種類的產品。

相關文章