設計模式之——工廠模式(C)
主要介紹抽象工廠模式,以及工廠方法和抽象工廠之間的區別:
(1)抽象工廠模式:它提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。
抽象工廠允許客戶使用抽象的介面來建立一組相關的產品,而無需知道實際產出的具體產品是什麼。這樣,客戶就從具體的產品中解耦出來。
抽象工廠類圖如下所示:
(2)抽象工廠VS工廠方法
抽象工廠——提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。
工廠方法——定義了一個建立物件的介面,但由子類決定要例項化的類是哪一個。工廠方法讓類把例項化推遲到子類中。
麵包店對應的工廠方法模式類圖如下所示:
麵包店對應的抽象工廠模式類圖如下圖所示:
(3)工廠模式總結:
A:OO原則
多用組合,少用繼承。
針對介面程式設計,不針對實現程式設計。
為互動物件之間的鬆耦合設計而努力。
類應該對擴充套件開放,對修改關閉。
依賴抽象,不要依賴具體類。
B:所有的工廠都是用來封裝物件的建立。
簡單工廠,雖然不是真正的設計模式,但仍然不失為一個簡單的方法,可以將客戶程式從具體類解耦。
工廠方法使用繼承:把物件的建立委託給子類,子類實現工廠方法來建立物件。
抽象工廠使用物件組合:物件的建立被實現在工廠介面所暴漏出來的方法中。
所有的工廠模式都通過減少對應用程式的具體類之間的依賴促進鬆耦合。
C:工廠方法允許類將例項化延遲到子類中執行。
抽象工廠建立相關的物件家族,而不需要依賴它們的具體類。
依賴倒置原則指導我們避免依賴具體型別,而要儘量依賴抽象。
工廠能夠幫助我們針對抽象程式設計,而不是針對具體類程式設計。