天天看點

工廠模式(簡單工廠+工廠+抽象工廠)

所謂簡單工廠方法模式,就是為目标類建立一個工廠,當有多個目标實作的時候,在這個工廠内部進行邏輯判斷來根據條件建立不同的目标執行個體。

木質桌子:WoodenDesk

塑膠桌子:PlasticDesk

類型枚舉:Type

桌子工廠:DeskFactory

測試類:Clienter

執行結果:塑膠桌

這就是簡單工廠方法,隻有一個工廠類來面向多個目标實作。當目标實作增多時,我們不得不去修改工廠類的方法,使其相容新的實作類型,這明顯違背了開閉原則,是以出現了工廠方法模式。

工廠方法模式是對簡單工廠模式的抽象更新,将工廠這個概念抽象出來成為接口,然後針對每種目标實作類建立一個工廠實作,一對一來實作,當新增了目标實作,隻要同時新增一個工廠實作即可。

下面看看執行個體:

桌子接口:Desk

桌子工廠接口:DeskFactory

木質桌子工廠:WoodenDeskFactory

塑膠桌子工廠:

執行結果:木質桌

從上面的執行個體中可以很容易看出來,工廠方法模式的重點就在這個工廠接口了。

目标可以無限擴充,工廠類也要随之擴充,一對一存在,滿足了開閉原則,但如果目标實作較多,工廠實作類也會增多,不簡潔。

抽象工廠模式是對工廠方法模式的再更新,但是二者面對的場景稍顯差别。

工廠方法模式面對的目标一般都是單類的,就比如上面的例子,目标就是桌子這一類商品。

如果是這樣的呢:生産的是桌椅組合,目标的一套商品,每一套商品中的每類商品的種類的不同的,不同的組合形成不同的套裝。

這種情況下,就需要使用抽象工廠模式

我們還以家具為例:

椅子接口:Chair

木質椅子:WoodenChair

塑膠椅:PlasticChair

家具工廠接口:FurnitureFactory

木質家具工廠:WoodenFurnitureFactory

塑膠家具工廠:PlasticFurnitureFactory

執行結果:

可以看出二者場景的不同之處,抽象工廠模式面對的是一個組合體,如果将這一點排除的話,其他方面看起來,二者還是相似的。

這裡在目标每添加一種組合時,就需要建立一個工廠實作來對應,這一點滿足開閉原則,不會修改已有類。

但是有一種情況,會導緻修改原有類,那就是當目标需要在家具中新增一種家具類型的時候,比如例子中,家具組合中隻包含桌子和椅子,如果再添加一種書櫃,那麼所有的工廠包括工廠接口都面臨修改。

原文連結

繼續閱讀