工廠模式
成都創(chuàng)新互聯公司一直在為企業(yè)提供服務,多年的磨煉,使我們在創(chuàng)意設計,成都全網營銷推廣到技術研發(fā)擁有了開發(fā)經驗。我們擅長傾聽企業(yè)需求,挖掘用戶對產品需求服務價值,為企業(yè)制作有用的創(chuàng)意設計體驗。核心團隊擁有超過10年以上行業(yè)經驗,涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領域,公司涉及領域有基礎互聯網服務綿陽電信機房機柜租用、成都App定制開發(fā)、手機移動建站、網頁設計、網絡整合營銷。
工廠模式是創(chuàng)建型模式模式,解決new對象時的一些列問題,如:依賴,耦合,后期維護等
1. 簡單工廠模式
如:有一個披薩店類,制作披薩流程如下的,,,代碼里直接new出了披薩,然后做些操作,如下:
我們把new這段代碼封裝起來,移動到單獨的一個類里(SimplePizzaFactory),我們新增的類就是工廠,如下;
最終的代碼如下;
總結:
新增的SimplePizzaFactory就是簡單工廠模式(一般沒有子類,沒有再繼承關系),我們看看定義,如下:
2. 工廠方法模式
定義:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。
問題:披薩店的列子中,如果有兩個分店,一個在美國,一個在英語,,那他們需要生產本地化的披薩,這時要引入工廠方法模式了,類圖如下:
說明:pizzaStore超類(工廠類),有兩個子類,分別兩個子類來決定到底實例化那些產品。
3. 抽象工廠模式
定義:抽象工廠模式提供一個接口,用于創(chuàng)建相關或依賴對象的家族,而不需要明確指定具體類??梢岳斫獬墒嵌鄠€工廠方法的組合。
解決問題:在工廠方法模式中,我們的具體創(chuàng)建者每次使用都只能創(chuàng)建一個同類型的對象,假如我們現在需要的是多個不同類型的對象,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到一個類,這就是抽象工廠模式,它就是專門用來創(chuàng)建多個產品,也可以說是創(chuàng)建產品家族的。類圖如下:
需求:為了保證質量,我們需要把原料統(tǒng)一共同時,就適合抽象工廠來解決。類圖如下:
抽象工廠模式的優(yōu)點
?。?)、允許客戶使用抽象的接口創(chuàng)建一組相關產品,而不需要知道(或者關心)產出的具體產品是什么,這樣客戶就可以從具體的產品中解耦出來。
(2)、一個具體工廠可以創(chuàng)建多個產品,與工廠方法模式相比,可以少產生具體工廠的類數量。
?。?)、易于交換產品系列,只要更換具體工廠,就可以改變這個產品系列。
抽象工廠模式的和缺點
?。?)、抽象工廠是使用組合的方式把工廠方法集合到一個類中,當新增一個產品家族成員時就要修改抽象工廠類及其下面的具體工廠類,所以它的擴展性比較差。
?。?)、每新增一個產品子類都要創(chuàng)建一個類,當產品子類過多時會產生很多類,導致系統(tǒng)復雜性加大。
抽象工廠模式的使用場合
1、當需要創(chuàng)建產品家族,或者需要想讓創(chuàng)建的產品集合起來時使用。
2、當系列產品不固定,在以后可能會增加整個系列產品時使用。
設計原則:
1. 對擴展開放,對修改關閉。
2. 依賴抽象,不要依賴具體類。