解決核心問題:為了解決簡單工廠模式新增具體產品時习勤,需要修改工廠類的邏輯的問題信峻。這違背了開閉原則。
要點
- 簡單工廠模式中祭饭,工廠類處于整個工廠的核心位置芜茵,邏輯繁重,具體的產品與工廠類之間的耦合度高倡蝙,嚴重影響了系統(tǒng)的靈活性和擴展性九串。
- 工廠方法模式中,將單個工廠分割為多個單一的工廠寺鸥,針對不同的產品提供不同的工廠猪钮。
定義
定義一個用于創(chuàng)建對象的接口,讓子類決定將哪一個類實例化胆建。工廠方法模式將讓一個類的實例化延遲到其子類躬贡。
UML類圖
角色以及職責
- Product(抽象產品):定義產品的接口,是工廠方法模式所創(chuàng)建對象的超類眼坏,也就是產品對象的公共父類拂玻。
- ConcreteProduct(具體產品):實現了抽象產品接口,某種類型的具體產品由專門的具體工廠創(chuàng)建宰译,具體工廠和具體產品之間一一對應檐蚜。
- Factory(抽象工廠):聲明了工廠方法,用于返回一個產品沿侈,抽象工廠是工廠方法模式的核心闯第,所有創(chuàng)建對象的工廠類都必須實現該接口。
- ConcreteFactory(具體工廠):抽象工廠類的子類缀拭,實現了抽閑工廠中定義的工廠方法咳短。并可由客戶端調用填帽,返回一個具體產品的實例。
總結
- 主要優(yōu)點:
- 工廠方法用來創(chuàng)建客戶所需要的產品咙好,同時還向客戶隱藏了哪些具體產品類將被實例化這一細節(jié)篡腌,用戶只需要關系所需產品對應的工廠,無須關心創(chuàng)建細節(jié)勾效,甚至無須知道具體產品類的類名嘹悼。