1. 程式人生 > >抽象工廠和工廠方法模式的比較(轉載)

抽象工廠和工廠方法模式的比較(轉載)

來源:http://blog.csdn.net/zhengzhb/article/details/7359385/     抽象工廠模式

http://blog.csdn.net/mark_lq/article/details/45132113  等級結構和產品族

定義:為建立一組相關或相互依賴的物件提供一個介面,而且無需指定他們的具體類。

型別:建立類模式

類圖:

比較:

在抽象工廠模式中,有一個產品族的概念:所謂的產品族,是指位於不同產品等級結構中功能相關聯的產品組成的家族。抽象工廠模式所提供的一系列產品就組成一個產品族;而工廠方法提供的一系列產品稱為一個等級結構。我們依然拿生產汽車的例子來說明他們之間的區別。

(1) 產品等級結構:產品等級結構即產品的繼承結構,如一個抽象類是汽車工廠,其子類有兩廂車,三廂車,則抽象汽車工廠與具體汽車中之間構成了一個產品等級結構,抽象汽車是父類,而具體的(多少)廂的汽車是其子類。
 (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排量三廂車兩個產品,那麼這個工廠模式就是抽象工廠模式,因為他提供的產品是分屬兩個不同的等級結構。當然,如果一個工廠提供全部四種車型的產品,因為產品分屬兩個等級結構,他當然也屬於抽象工廠模式了。