抽象工廠和工廠方法模式在應用中的不同作用

2021-05-30 16:14:02 字數 4732 閱讀 4969

1樓:匿名使用者

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。

本文是本人對這三種模式學習後的一個小結以及對他們之間的區別的理解。

簡單工廠

簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數的不同來返回不同的物件例項。

不修改**的話,是無法擴充套件的。

工廠方法

工廠方法是針對每一種產品提供一個工廠類。通過不同的工廠例項來建立不同的產品例項。

在同一等級結構中,支援增加任意產品。

抽象工廠

抽象工廠是應對產品族概念的。比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那麼每一個工廠都要有建立轎車,貨車和客車的方法。

應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。

小結★工廠模式中,重要的是工廠類,而不是產品類。產品類可以是多種形式,多層繼承或者是單個類都是可以的。但要明確的,工廠模式的介面只會返回一種型別的例項,這是在設計產品類的時候需要注意的,最好是有父類或者共同實現的介面。

★使用工廠模式,返回的例項一定是工廠建立的,而不是從其他物件中獲取的。

★工廠模式返回的例項可以不是新建立的,返回由工廠建立好的例項也是可以的。

區別簡單工廠

:用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)

工廠方法 :用來生產同一等級結構中的固定產品。(支援增加任意產品)

抽象工廠

:用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支援增加產品族)

以上三種工廠

方法在等級結構和產品族這兩個方向上的支援程度不同。所以要根據情況考慮應該使用哪種方法。

工廠方法模式與抽象工廠模式的區別

2樓:

工廠方法模式:

一個抽象產品類,可以派生出多個具體產品類。

一個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類只能建立一個具體產品類的例項。

抽象工廠模式:

多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。

一個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類可以建立多個具體產品類的例項。

區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。

工廠方法模式的具體工廠類只能建立一個具體產品類的例項,而抽象工廠模式可以建立多個。

3樓:匿名使用者

對於java來說,你能見到的大部分抽象工廠模式都是這樣的:

---它的裡面是一堆工廠方法,每個工廠方法返回某種型別的物件。

比如說工廠可以生產滑鼠和鍵盤。那麼抽象工廠的實現類(它的某個具體子類)的物件都可以生產滑鼠和鍵盤,但可能工廠a生產的是羅技的鍵盤和滑鼠,工廠b是微軟的。

這樣a和b就是工廠,對應於抽象工廠;

每個工廠生產的滑鼠和鍵盤就是產品,對應於工廠方法;

用了工廠方法模式,你替換生成鍵盤的工廠方法,就可以把鍵盤從羅技換到微軟。但是用了抽象工廠模式,你只要換家工廠,就可以同時替換滑鼠和鍵盤一套。如果你要的產品有幾十個,當然用抽象工廠模式一次替換全部最方便(這個工廠會替你用相應的工廠方法)

所以說抽象工廠就像工廠,而工廠方法則像是工廠的一種產品生產線----------------

我看不到**,也不知道你的方法返回什麼。但相信是,因為dao模式的確用了工廠方法,而你的類名又叫factory,這是工廠方法習慣用的名字,create方法很可能就是用來返回新物件的。工廠方法是最常用也是最簡單的一個設計模式。

只要你的方法像new一樣 返回新一個物件就是了

java 抽象工廠和工廠方法模式的區別

4樓:匿名使用者

工廠方法模式:一個抽象產品類,可以派生出多個具體產品類。

一個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類只能建立一個具體產品類的例項。

抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。

一個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類可以建立多個具體產品類的例項。

工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別

5樓:灬nico丶

工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:

1、首先,三者的建立物件是不相同的。

進行建立物件時,「工廠模式」不使用new建立物件,而是使用factory模式;「簡單工廠模式」則是通過fw模式來建立物件;「抽象工廠模式」使用迭代模式來建立物件。

2、其次,三者的定義變數不同。

「工廠模式」在使用時可以隨時設定變數,不用提前進行設定。「簡單工廠模式」中需要使用引數或者配置檔案等已經定義好的變數,然後才能進行下一步的操作。「抽象工廠模式則」則需要每次增加產品時,進行修改類方法。

3、最後,三者的介面數量不同。「工廠模式」可以使用兩個介面以及三個介面,「簡單工廠模式」只可以使用一個介面。「抽象工廠模式」則可以使用無限個介面。

6樓:紙墨成殤

1、建立物件不同。建立物件時,「工廠模式」使用factory模式替代使用new建立物件;「簡單工廠模式」使用fw模式建立物件;「抽象工廠模式」則使用迭代模式建立物件。

2、定義變數不同。「工廠模式」不用事先定義變數,使用時隨時引用便可。「簡單工廠模式」,使用引數或者配置檔案等事先定義好的變數,然後利用分支判斷初始化具體產品類並返回。

「抽象工廠模式則」不符合「開發-封閉」原則,每次增加產品,都需要修改類方法。

3、介面數量不同。「工廠模式」有兩至三個介面。「簡單工廠模式」只有一個介面。抽象工廠模式理論上具有無限個介面。

擴充套件資料

程式設計使用「工廠模式」的優缺點:

1、優點:

方便擴充套件演算法,比如增加一個開根號的功能,我們只要繼續繼承運算類就行了,同時客戶端也就是使用者不知道具體的實現細節,只要給出相關標示符,工廠函式就馬上給他建立一個他想要的實體就行了。減少了使用者和功能開發者之間的耦合度。

2、缺點:

在進行擴充套件的時候,我們要更改工廠函式裡面的那個分支語句switch,這樣便破壞了ocp,而且當有多級結構繼承的時候,簡單工廠就會因為只能對應平行一層記得繼承,不得不使得好多類繼承同一個介面,然後得到a*b這麼多的工廠實體可能,工廠函式很難維護。

7樓:百度使用者

工廠模式的好處就在於將工廠和產品之間的耦合降低,將具體產品的構造過程放在了具體工廠類裡面。在以後擴充套件產品的時候方便很多,只需要新增一個工廠類,一個產品類,就能方便的新增產品,而不需要修改原有的**。而在簡單工廠中,如果要增加一個產品,則需要修改工廠類,增加if/else分支,或者增加一個case分支,工廠模式符合軟體開發中的ocp原則(open close principle),對擴放,對修改關閉。

抽象工廠模式:這個模式我總是感覺和builder模式非常相似。

工廠方法模式提供的是對一個產品的等級模式,,而抽象工廠方法提供的是對多個產品的等級模式,注意,這裡的多個具體產品之間是相互耦合的,也就是說這裡的抽象工廠提供的產品之間是存在某種聯絡的。

有人做如下的比較:

工廠方法模式:一個抽象產品類,可以派生出多個具體產品類。

一個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類只能建立一個具體產品類的例項。

抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。

一個抽象工廠類,可以派生出多個具體工廠類。

每個具體工廠類可以建立多個具體產品類的例項。

區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。

工廠方法模式的具體工廠類只能建立一個具體產品類的例項,而抽象工廠模式可以建立多個。

下面是一個形象的比喻:

無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作介面,以達到最大程度上的複用。拿一個生產水杯(cup)的工廠舉例:起初,不用工廠模式,我必須在生產水杯之前知道水杯的材料和形狀等水杯的所有特徵才能生產,這就是我們的new cup();這個cup必須是具體的。

廠主發現同一形狀的被子,只是材料不同,如一個是玻璃(glass)的,一個是瓷(china)的,但是確要兩條生產線,顯然有資源浪費的嫌疑。現在廠主生產杯子時先不讓生產線知道我要產的是玻璃的還是瓷的,而是讓它在不知道具體材料的情況下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形狀的具體杯子了。但是很可惜,java並不能new一個抽象的cup,所以就有了簡單工廠模式。

原來是cup cup=new cup;現在是******cupfactory.createcup(string cupname),根據cup的名字生產cup,而createcup返回的是一個實現了 cup介面或抽象類的具體cup。簡單抽象工廠模式有一個問題,就是當我現在想生產一個同樣形狀的鐵杯時,工廠裡並沒有定義相應的處理流程,只能更改createcup方法,這就不合理了。

我現在只是想生產鐵杯,你只要在最後的時候把玻璃原料換成鐵的不就行了嗎,幹嘛還要更改整條生產線呢?於是就有了工廠模式。原來生產線在生產模具的時候還要考慮是為玻璃杯生產的模具還是為鐵杯生產的模具,現在它不用管了。

cupfactory.createcup()建立cup.cupfactory是介面或抽象類。

實現它的具體子類會建立符合cup介面的具體cup。那麼現在廠主想要生產水壺(kettle),用工廠模式就不得不再造一條水壺生產線,能不能在水杯生產線同時生產水壺呢?這就是抽象工廠模式。

java抽象工廠和工廠方法模式的區別

工廠方法模式 一個抽象產品類,可以派生出多個具體產品類。一個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類只能建立一個具體產品類的例項。抽象工廠模式 多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。一個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類可以建立多個具體產品類的例項。工...

簡單工廠模式適用於哪些場合,使用簡單工廠模式的優點是什麼?

簡單工廠 來 工廠,都可以用於源已知某些條件後,對類的選擇,而這些類都是同一父類的子類。這種情況下使用,例如 以下為偽碼 class 1 baseclass baseclass createinstance 使用簡單工廠還是工廠就看具體問題。使用簡單工廠模式的優點是什麼?簡單工廠 模式的優點 1 工...

廠方拖著不做工傷鑑定,怎麼辦,工廠不給工傷員工做傷殘鑑定怎麼辦

廠方拖著不做工傷鑑定,可以在一年之內去當地的社保部門做工傷認定。法律依據 工傷保險條例 第十九條 社會保險行政部門受理工傷認定申請後,根據稽核需要可以對事故傷害進行調查核實,用人單位 職工 工會組織 醫療機構以及有關部門應當予以協助。職業病診斷和診斷爭議的鑑定,依照職業病防治法的有關規定執行。對依法...