抽象工廠和工廠方法模式的比較(轉載)
來源:http://blog.csdn.net/zhengzhb/article/details/7359385/ 抽象工廠模式
http://blog.csdn.net/mark_lq/article/details/45132113 等級結構和產品族
定義:為建立一組相關或相互依賴的物件提供一個介面,而且無需指定他們的具體類。
型別:建立類模式
類圖:
比較:
在抽象工廠模式中,有一個產品族的概念:所謂的產品族,是指位於不同產品等級結構中功能相關聯的產品組成的家族。抽象工廠模式所提供的一系列產品就組成一個產品族;而工廠方法提供的一系列產品稱為一個等級結構。我們依然拿生產汽車的例子來說明他們之間的區別。
(2) 產品族:在抽象工廠模式中,產品族是指由同一個工廠生產的,位於不同產品等級結構中的一組產品,如汽車工廠生產的兩廂汽車,三廂汽車,2.0排量的兩廂汽車位於兩廂汽車等級結構中,2.4排量的三廂汽車位於三廂汽車等級結構中,2.0排量的兩廂汽車、2.4排量的三廂汽車構成了一個產品族。
等級結構和產品族詳解:http://blog.csdn.net/mark_lq/article/details/45132113
車的生產類圖
在上面的類圖中,兩廂車和三廂車稱為兩個不同的等級結構;而2.0排量車和2.4排量車則稱為兩個不同的產品族。再具體一點,2.0排量兩廂車和2.4排量兩廂車屬於同一個等級結構,2.0排量三廂車和2.4排量三廂車屬於另一個等級結構;而2.0排量兩廂車和2.0排量三廂車屬於同一個產品族,2.4排量兩廂車和2.4排量三廂車屬於另一個產品族。
明白了等級結構和產品族的概念,就理解工廠方法模式和抽象工廠模式的區別了,如果工廠的產品全部屬於同一個等級結構,則屬於工廠方法模式;如果工廠的產品來自多個等級結構,則屬於抽象工廠模式。在本例中,如果一個工廠模式提供2.0排量兩廂車和2.4排量兩廂車,那麼他屬於工廠方法模式;如果一個工廠模式是提供2.4排量兩廂車和2.4排量三廂車兩個產品,那麼這個工廠模式就是抽象工廠模式,因為他提供的產品是分屬兩個不同的等級結構。當然,如果一個工廠提供全部四種車型的產品,因為產品分屬兩個等級結構,他當然也屬於抽象工廠模式了。