工廠模式比較
1、簡單工廠模式
簡單工廠模式的特點是乙個工廠生產乙個型別的產品。
簡單工廠模式
又可以叫做靜態工廠方法模式,簡單的來說就是由乙個工廠物件來決定建立出哪乙個具體的產品類的例項。其類圖如下所示:
工廠類(creator)包含乙個或者多個靜態工廠方法,每個靜態工廠方法會建立乙個新的具體產品的例項。乍看起來該模式跟單例模式很相似,其實它們還是有著很大的區別的,簡單來說有三點區別:
a) 單例類的構造方法要求是私有的,只能通過單例子的靜態工廠方法例項化。
b) 單例類兼有工廠類和產品類的角色,就是它自己。
c) 最大的區別就是單例子只會有乙個例項存在。
如果要增加乙個新的產品類,那麼必須修改工廠類來提供相應的靜態建立方法,這是簡單工廠模式的限制,如果要克服這個限制的話,建議使用下述的工廠方法模式。
2、工廠方法模式
工廠方法模式的特點是多個工廠生產乙個型別的產品。
工廠方法模式是對簡單工廠模式的擴充套件,將核心的工廠類上公升為乙個介面或者抽象類,具體的產品建立工作由具體的工廠類來完成,避免了簡單工廠模式引入新產品時需要修改工廠類的問題,詳細的類圖如下所示:
3、抽象工廠模式
抽象工廠模式的特點是多個工廠生產多個型別的產品。
抽象工廠模式是工廠方法模式的再次擴充套件和抽象化,這裡需要引入乙個產品族的概念,那麼什麼是產品族呢?所謂產品族,就是指位於不同產品等級結構中功能相關聯的產品所組成的家族,舉乙個例子來說明一下,現在主流的手機作業系統有android、iphone os以及windows mobile 7.0,現在要在這三款平台上來開發兩款熱門的遊戲,乙個是文明4(civ 4),還有乙個是極品飛車13(nfs13),那麼我們就擁有兩個產品等級,亦即文明4和極品飛車,它們分屬於三個不同的產品族,也就是三個不同的作業系統平台上開發的遊戲,如下所示:
而所謂的抽象工廠模式就是要在具體的工廠類中建立屬於同乙個產品族,但是屬於不同產品等級結構的產品。相關的類圖如下所示:
該類圖中有兩個不同的產品等級,亦即abstractproducta和abstractproductb,而a1和b1顯然屬於同乙個產品族,a2和b2也是屬於同乙個產品族。
4、建造模式
建造模式的特點是定製產品。
該模式允許乙個導演者物件呼叫建造者物件一步一步造出各種零件,然後到最後構成完整的產品物件,如下所示:
抽象工廠模式與建造模式有點相似,因為它也可以建立複雜物件。主要的區別是生成器模式著重於一步步構造乙個複雜物件。而抽象工廠模式著重於多個系列的產品物件(簡單的或是複雜的)。生成器在最後的一步返回產品,也就是在建造者內部來完成完整產品的組裝工作,而對於抽象工廠來說,產品是立即返回的。
簡單工廠模式,工廠方法模式,抽象工廠模式 比較
簡單工廠模式 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數不同來返回不同的物件的例項,不修改 的話,是無法擴充套件的 工廠方法模式 工廠方法模式是針對每一種產品提供乙個工廠類,通過不同的工廠例項來建立不同的產品例項。在同一等級結構中,支援增加任意產品 抽象工廠模式 抽象工廠模式應對產品族的...
簡單工廠模式,工廠方法模式,抽象工廠模式 比較
簡單工廠模式 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數不同來返回不同的物件的例項,不修改 的話,是無法擴充套件的 工廠方法模式 工廠方法模式是針對每一種產品提供乙個工廠類,通過不同的工廠例項來建立不同的產品例項。在同一等級結構中,支援增加任意產品 抽象工廠模式 抽象工廠模式應對產品族的...
簡單工廠模式,工廠方法模式,抽象工廠模式 比較
簡單工廠模式 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數不同來返回不同的物件的例項,不修改 的話,是無法擴充套件的 工廠方法模式 工廠方法模式是針對每一種產品提供乙個工廠類,通過不同的工廠例項來建立不同的產品例項。在同一等級結構中,支援增加任意產品 抽象工廠模式 抽象工廠模式應對產品族的...