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

2021-06-21 21:31:24 字數 2102 閱讀 4819

說到設計模式,自然少不了簡單工廠模式,工廠方法和抽象工廠這三姐妹。它們之間可謂是各有所長,術業專攻啊!這篇部落格來簡單的梳理一下三者之間的關係。

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

那麼上述三種模式之間究竟是怎樣的關係呢?各自又有什麼優缺點呢?

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

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

public class operationfactory

return oper ;

}

通過**我們可以看出,在簡單工廠中,可以講多種需要例項化的物件在乙個分支結構中一次性的完成。具體的選擇要留給客戶端去做。

例如:

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...