三種工廠模式的優劣比較

GeekWay發表於2013-04-03

3中工廠模式的比較

比較物件:
簡單工廠模式
工廠方法模式
抽象工廠模式



概念解釋:

簡單工廠模式: 簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

工廠方法模式:工廠方法(Factory Method)模式的意義是定義一個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

抽象工廠模式:抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。根據LSP原則,任何接受父型別的地方,都應當能夠接受子型別。因此,實際上系統所需要的,僅僅是型別與這些抽象產品角色相同的一些例項,而不是這些抽象產品的例項。換言之,也就是這些抽象產品的具體子類的例項。工廠類負責建立抽象產品的具體子類的例項。


3種工廠模式之間的比較:

    在簡單工廠模式中,一個工廠類負責所有產品物件的建立,這個工廠類的職責大大增加,可能客戶端對於某些產品的建立方式會有不同的要求,這樣的話,就要不斷的修改工廠類,增加相應的判斷邏輯,不利於後期的程式碼維護。
    另外,由於簡單工廠模式使用靜態方法建立,這就導致靜態方法無法被繼承(All Languages)

    所以,簡單工廠模式適用於建立的物件比較少或簡單的情況。

    在工廠方法模式中,一個具體的工廠類負責建立一個單獨的產品,如果有新的產品加進來,只需要增加一個具體的建立產品工廠類和具體的產品類就可以了,不會影響到已有的其他程式碼,程式碼量也不會變大,後期維護更加容易,增加了系統的可擴充套件性。
但是工廠方法模式無法體現產品之間的關係,如果有兩個不同的產品需要建立,就需要兩個不同的工廠類,即使這兩個產品有某鍾必要的聯絡,也還是需要兩個不同的工廠類。

    在抽象工廠模式中,一個具體的工廠類負責建立一系列相互關聯的產品,當一系列相互關聯的產品被設計到一個工廠類裡後,客戶端的呼叫變得非常簡單;如果要更換這一系列的產品,只需要更換一個工廠類即可,但零件之間的組裝如果放到客戶端,則客戶端變得非常臃腫,如果把零件之間的組裝放在工廠類裡,則又違反了工廠類單一職責的原則,使得工廠類既要負責物件的建立,又要負責產品的組裝。

相關文章