簡單工廠 VS 工廠方法 VS 抽象工廠

2021-09-07 04:25:43 字數 2141 閱讀 9480

說到設計模式。自然少不了簡單工廠模式。工廠方法和抽象工廠這三姐妹。

它們之間可謂是各有所長,術業專攻啊!這篇部落格來簡單的梳理一下三者之間的關係。

那麼工廠又是什麼意思呢?結合三者的特點,我覺得能夠這樣理解:工廠能夠看做乙個特殊的類,在這個類中專門負責生產一系列產品(物件)的乙個集合就能夠成為工廠。

那麼上述三種模式之間到底是如何的關係呢?各自又有什麼優缺點呢?

一、簡單工廠模式 vs 工廠方法模式

1、先來看乙個簡單工廠的一段**:

public class operationfactory

return oper ;

}

通過**我們能夠看出。在簡單工廠中,能夠講多種須要例項化的物件在乙個分支結構中一次性的完畢。詳細的選擇要留給client去做。

比如:

oper= operationfactory.createoperate("+");
那我們繼續擴充套件。當我們想要在程式中新增一種演算法符號,這時,我們必須對簡單工廠中的分支語句進行改動。這樣事實上就違背了設計模式中的開放——封閉原則。為了避免對內改動。我們再來看一下工廠方法模式。

2、工廠方法模式

核心思想:建立乙個介面,子類去實現這個介面。同一時候,依據子類來決定到底要例項化哪個物件。

看一段**:

inte***ce ifactory //定義乙個介面

class addfactory:ifactory

}class subfactory:ifactory

}

其餘**類似略。

通過工廠方法模式。我們能夠發現,假設如今再新增乙個運算子的話。我們僅僅須要額外新增乙個運算子子類和實現介面的子類就好了,而不用去對已經寫好的類進行改動了。可見與簡單工廠相比,工廠方法模式遵循了開放——封閉原則:即對外擴充套件,對內封閉。

另乙個小小的差別:在簡單工廠中用static宣告方法為靜態方法,而工廠方法中卻未用到靜態方法,原因是:在簡單工廠中因為不須要子類進行繼承,所以使用靜態方法能夠避免例項化。能夠用類來直接呼叫方法。而在工廠方法中因為存在繼承關係,所以不能使用靜態方法

二、工廠方法 vs 抽象工廠

我覺得事實上這二者本屬於一類。

最基本的差別是:

工廠方法:涉及到的是僅僅需定義乙個產品類和乙個物件介面。能夠派生出多個子類。

而抽象工廠:定義一系列即多個產品類和多個物件介面。分別派生出多個子類。

這裡,不多做解釋。

三、簡單工廠 vs 抽象工廠

在抽象工廠中能夠定義多個產品類和物件介面,但是,假設我們想要在此基礎上多加乙個產品,那麼此時。須要新增的類就會非常多。同一時候還須要去更改涉及到的各個工廠。這事實上無形中就已經新增了**的維護量。

對於程式設計來說又是乙個不好的兆頭。那麼有什麼辦法能夠改進它呢?事實上,簡單工廠能夠彌補這個缺陷。

舉乙個大話設計模式中的樣例:建立資料庫:sqlserver和access兩類,同一時候包括iuser和idepartment兩張表假設用抽象工廠方法來設計如圖:

如圖,假設此時,我們想要在新增乙個專案表project時。必須新增專案介面。sqlserverproject和accessproject的類同一時候。還必須改動企業兩個工廠,在兩個工廠中新增例項化project的項,造成**維護量新增。

此時。假設我們把ifactory抽象工廠用乙個dataaccess來取代。同一時候新增乙個字串變數,利用簡單工廠來例項化字串變數中所指定的資料庫。

簡單工廠方法的類圖例如以下:

當然,我們能夠看出來。利用簡單工廠方法。儘管修改相對少了。可是仍然違背了開放——封閉原則。由於在新增其它表時。仍須要修改dataaccess中的分支語句,所以。對於簡單工廠和抽象工廠方法二者應該酌情使用。二者都有自己的長處和缺點,我們應該依據詳細情況詳細分析。

當然為了進一步改進。大話設計模式中還提到了利用「反射」和配置檔案的技術。總之。設計模式是一門藝術,僅僅有更好。沒有最好!

簡單工廠vs工廠方法vs 抽象工廠方法

以乙個例子來表示 1.生產car 產品 我們可以直接car car new car 該工廠只生產這個產品。具體工廠 具體產品 1 1 2.當car的種類增多以後,我們引入簡單工廠。簡單工廠使用繼承和switch來顯示多型。我們將引入抽象工廠ca ctory。同時,產品將抽象為抽象產品。car car...

簡單工廠 VS 工廠方法 VS 抽象工廠

說到設計模式,自然少不了簡單工廠模式,工廠方法和抽象工廠這三姐妹。它們之間可謂是各有所長,術業專攻啊!這篇部落格來簡單的梳理一下三者之間的關係。那麼工廠又是什麼意思呢?結合三者的特點,我認為可以這樣理解 工廠可以看做乙個特殊的類,在這個類中專門負責生產一系列產品 物件 的乙個集合就可以成為工廠。那麼...

簡單工廠 VS 工廠方法

1 工廠方法模式介紹 工廠方法模式 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到子類。還以簡單工廠模式中的例子為例 將簡單工廠模式中的工廠 tv類提出來作為乙個公共的介面,而對應的各個功能類各建立乙個具體的工廠去實現這個介面。如下 inte ce ifactor...