上週發表了工廠模式,接下來給大家講解一下抽象工廠模式。
可能很多人對設計模式不以為然,但是我想說的是,乙個不懂設計模式的人,就做不了乙個優秀的架構師,就看不懂優秀的程式設計,看不懂優秀的框架原始碼,根本不懂別人為什麼會那麼設計,為什麼那樣寫,只有你看懂了設計模式,能夠融會貫通的時候,為什麼很多人即使別人給他講了設計理論知識,可是還是苦於無法動手,不知道如何實現?歸根結底就是自己內心中沒有乙個設計思想,熟話說思想決定行為,所有我覺得想要成為乙個優秀的程式設計者,或者是架構師,設計模式對大家是非常重要的,好了廢話不多說了,我把個人所學到的一些知識給大家分享一下,希望能對大家有所幫助,有疑問的,或者有更好的想法,大家可以一起交流。
在講設計模式之前,我想問一下大家抽象工廠模式-與-工廠方法模式區別?
工廠模式:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類
抽象工廠模式:為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定他們的具體類
個人覺得這個區別在於產品,如果產品單一,最合適用工廠模式,但是如果有多個業務品種、業務分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方式。再通俗深化理解下:工廠模式針對的是乙個產品等級結構 ,抽象工廠模式針對的是面向多個產品等級結構的。
再來看看工廠方法模式與抽象工廠模式對比:
工廠方法模式
抽象工廠模式
針對的是乙個產品等級結構
針對的是面向多個產品等級結構
乙個抽象產品類
多個抽象產品類
可以派生出多個具體產品類
每個抽象產品類可以派生出多個具體產品類
乙個抽象工廠類,可以派生出多個具體工廠類
乙個抽象工廠類,可以派生出多個具體工廠類
每個具體工廠類只能建立乙個具體產品類的例項
每個具體工廠類可以建立多個具體產品類的例項
舉個例子說明下:
用種蔬菜的例子來說明事實,最初的時候,由於規模小,只種植一種蔬菜,根菜類蔬菜,這個時候由於種植方式比較簡單,採用簡單工廠模式即可,主要目的是讓工人輕鬆,下達工廠種植即可,但是隨著種植廠的發展以及市場的需求,要增加一種蔬菜型別種植了,莖菜,由於莖菜與根菜種植方式不一致,就需要兩個專門的種植工廠來進行管理,那麼久採用工廠模式來管理,乙個工廠負責一種作物的種植,這個時候產品可以理解為仍然在乙個層次。但是隨著科技的發展,我們逐步要種植轉基因與非轉基因食品了,在以前的蔬菜種類上又增加了乙個層次,這個時候無法將其作為乙個層次來解決,所以必須採用抽象工廠的方式來解決。我用uml圖表示三種結構:
而在沒乙個層次,種菜工人所關心的物件也不一樣,在簡單工廠模式下,工人要想到種植蘿蔔還是白菜,在工廠模式下,工人想到是種植根菜還是莖菜,而在抽象工廠模式下,則關心種植基因菜還是非基因菜。
總結一句話:抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的,抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。
接下來我分享一下原始碼:
而在沒乙個層次,種菜工人所關心的物件也不一樣,在簡單工廠模式下,工人要想到種植蘿蔔還是白菜,在工廠模式下,工人想到是種植根菜還是莖菜,而在抽象工廠模式下,則關心種植基因菜還是非基因菜
Java23種設計模式
定義 設計模式 design pattern 是一套反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。單例模式,特點 全域性只有乙個例項。定義 單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式的時候,單例物件的類必須...
Java23種設計模式
建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模 式 狀態模式 訪問者模式 中...
Java 23種設計模式
型別 模式建立型工廠模式 抽象工廠模式 單例模式 建造者模式 原型模式 結構型介面卡模式 橋接模式 組合模式 外觀模式 裝飾者模式 享元模式 模式 行為型責任鏈模式 命令模式 直譯器模式 迭代模式 中介者模式 備忘錄模式 觀察者模式 狀態模式 策略模式 模板方法模式 訪問者模式 模式說明 工廠模式 ...