簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
一、簡單工廠模式、工廠方法模式和抽象工廠模式的區別
簡單工廠模式
簡單工模式時類的創建模式,又叫做靜態工廠方法(static Factory Method)。簡單工廠模式是一個工廠對象決定創建出哪一種產品類的實例。它存在的目的很簡單:定義一個創建對象的接口。
組成:
工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。
抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。在java中由接口或者抽象類來實現。
具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。
工廠方法模式
是簡單工廠模式的進一步抽象化和推廣,工廠方法模式里不再只由一個工廠類決定那一個產品類應當被實例化,這個決定被交給抽象工廠的子類去做。
來看下它的組成:
抽象工廠角色: 這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。
具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般有抽象類或者接口來實現。
具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。
抽象工廠模式
在抽象工廠模式中,抽象產品 (AbstractProduct) 可能是一個或多個,從而構成一個或多個產品族(Product Family)。 在只有一個產品族的情況下,抽象工廠模式實際上退化到工廠方法模式。
工廠方法模式 VS 抽象工廠模式
工廠方法模式:一個抽象產品類,可以派生出多個具體產品類。每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。一個抽象工廠類可以派生出多個具體工廠類。每個具體工廠類可以創建多個具體產品的實例。
區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
延伸閱讀:
二、抽象工廠優缺點
抽象工廠的優點:抽象工廠模式除了具有工廠方法模式的優點外,最主要的優點就是可以在類的內部對產品族進行約束。所謂的產品族,一般或多或少的都存在一定的關聯,抽象工廠模式就可以在類內部對產品族的關聯關系進行定義和描述,而不必專門引入一個新的類來進行管理。
?抽象工廠的缺點:產品族的擴展將是一件十分費力的事情,假如產品族中需要增加一個新的產品,則幾乎所有的工廠類都需要進行修改。所以使用抽象工廠模式時,對產品等級結構的劃分是非常重要的。
以上就是關于簡單工廠模式、工廠方法模式和抽象工廠模式有何區別的內容希望對大家有幫助。

猜你喜歡LIKE
相關推薦HOT
更多>>
Concurrent Programming, Parallel Programming 的本質區別是什么?
一、Concurrent Programming, Parallel Programming 的本質區別略有交叉,各有不同。Parallel Programming強調如何在多于1個CPU等情況下對系詳情>>
2023-10-13 23:11:46
簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
一、簡單工廠模式、工廠方法模式和抽象工廠模式的區別簡單工廠模式簡單工模式時類的創建模式,又叫做靜態工廠方法(static Factory Method)。...詳情>>
2023-10-13 21:42:32
聚類和降維有什么區別與聯系?
一、聚類和降維的區別與聯系區別降維就是復雜的高維數據信息簡化為更容易閱讀的低維數據信息,就像素描把三維的立體圖形繪制在二維的平面上,而...詳情>>
2023-10-13 20:26:02
OC中協議和多態有什么區別?
一、OC中協議和多態的區別在Objective-C中,協議(Protocol)和多態(Polymorphism)是兩個不同的概念,它們的區別如下:協議(Protocol):協...詳情>>
2023-10-13 20:01:13熱門推薦
大家都在用的Mpp數據庫有哪些?
沸Concurrent Programming, Parallel Programming 的本質區別是什么?
熱lua編譯器和lua解釋器有什么區別?
熱怎么自定義Visual Studio代碼折疊識別的區域?
新4核4線程和4核8線程區別?
簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?
Spark 和 Hadoop 有什么區別?
cs和bs區別?
axios和ajax區別?
ar模型和ma模型的區別?
聚類和降維有什么區別與聯系?
DOF和HP有什么區別?
OC中協議和多態有什么區別?
SAS 9.0中,class指令跟by指令有哪些區別?
技術干貨






