簡單工廠 工廠方法和抽象工廠模式

2021-09-01 20:43:58 字數 2275 閱讀 7121

工廠模式是一種建立模式,專門負責將大量有共同介面的類例項化。工廠模式可以動態決定將哪乙個類例項化,不必事先知道每次要例項化哪乙個類。建立乙個物件通常的方式是直接new。另外,如果建立物件時做的事情不是如賦值這樣簡單的事,可能是很長一段**,會造成**結構比較混亂。我們需要將建立例項的責任與使用例項的責任分開,工廠模式可以幫到我們。

工廠模式有簡單工廠、工廠方法和抽象工廠三種形態,這三種形態是乙個從簡單到複雜的演進,下文介紹一下這三種形態的區別。

1.簡單工廠模式

簡單工廠模式,又稱為靜態工廠方法模式,是工廠模式最簡單的一種實現。

比如乙個農場生產各類水果,如果用**描述,這些水果實現乙個共同的fruit介面。

public inte***ce fruit

public class farmfactory

else if ("strawberry".equals(which))

else

} }

這樣如果我們要建立水果物件,只要使用fruitfactory的create靜態方法即可。

2.工廠方法模式

簡單工廠模式的缺點是對「開-閉」原則支援不夠,如果有新的水果產品加入到系統中,就需要修改工廠類。工廠方法模式是對簡單工廠模式的進一步抽象和推廣,並且克服了它的缺點。

工廠方法模式中,核心工廠類成為了乙個抽象角色,它不在負責所有產品的建立,而是將具體的建立工作交給子類去做。這樣可以允許系統在不修改具體工廠角色的情況下引進新的產品。

修改前面的例子,fruitfactory成為了乙個抽象角色,是所有具體工廠角色的超類。

public class farmfactory

生產每一類水果要有乙個具體的工廠類,比如生產蘋果的工廠類。}

3.抽象工廠模式

抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式可以提供乙個介面,在不必指定產品的具體型別的情況下,建立多個產品族中的產品物件。這就是抽象工廠模式的用意。

抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構;而抽象工廠模式則需要面對多個產品等級結構。抽象工廠模式還需要引進乙個產品族的概念,是指不同產品等級結構中,功能相關聯的產品組成的家族。如果產品等級結構是縱向的概念,那麼產品族就是橫向的概念。每乙個產品族中含有產品的數目,與產品等級結構的數目是相等的。

在抽象工廠模式中,每乙個產品族都有乙個具體工廠。每乙個具體工廠負責建立屬於同一產品族,但分屬於不同等級結構的產品。一般而言,有多少個產品等級結構,就會在工廠角色中有多少個工廠方法。每乙個產品等級結構有多少具體產品,就有多少產品族,也就會在工廠等級結構中發現多少個具體工廠。

繼續上面農產品工廠的例子,在在抽象工廠模式中的應用。種在田間的北方作物與種在大棚中的熱帶作物都是系統的產品,分屬於兩個產品族。

定義介面farmfactory,它沒有任何方法,是乙個標識介面。

public inte***ce farmfactory{}

northernfactory和tropicalfactory是farmfactory的具體實現類。

public class northernfactory implements farmfactory

//蔬菜的工廠方法

public fruit createvegetable(string name)

}public class tropicalfactory implements farmfactory

//蔬菜的工廠方法

public fruit createvegetable(string name)

}

水果和蔬菜也分別定義成標識介面。

public inte***ce fruit{}

public inte***ce vegetable{}

northernfruit、tropicalfruit、northernvegetable、tropicalvegetable分別實現fruit和vegetable,它們對應於前面例子中的葡萄、士多啤梨和蘋果,只不過在這裡為了便於理解,讓它們分別屬於兩個產品等級結構(水果和蔬菜),同時它們又分屬於北方作物與熱帶作物兩個產品族。

假設蘋果也有對應得蔬菜的話,那麼大概**如下:

//蘋果對應蔬菜的工廠方法

public fruit createvegetable()

} 簡單工廠、工廠方法和抽象工廠模式很容易混淆,一直想寫出來,但內容很抽象不好寫,想算了,但心中鼓譟之聲日甚一日,決定還是寫出來,在這過程中又加深了理解,人不能偷懶。

工廠模式(簡單工廠 工廠方法 抽象工廠)

二 工廠方法 三 抽象工廠 以下內容通過生產小公尺和華為手機 電腦 的例子實現 uml圖 phone介面 abstractproduct public inte ce phone miphone product1 public class miphone implements phone overr...

簡單工廠模式 工廠方法模式和抽象工廠模式

第一.簡單工廠模式 有三種元件,乙個介面,n個實現類,乙個工廠類。在建立物件的時候,利用簡單工廠模式,可以根據傳參的不同,建立出不同的實現類物件。實現步驟 1.建立介面 2.建立n個實現類 3.建立工廠類,裡面有返回值型別為介面的方法 見如下 1.建立介面 inte ce sender 2.建立介面...

簡單工廠模式 工廠方法模式和抽象工廠模式

一 簡單工廠模式 將建立物件和操作物件分離開來,實現解耦。簡單工廠模式通過乙個引數變數來決定例項化哪乙個類,主要包括抽象產品類 提供公共方法 具體產品類 覆蓋抽象產品類的公共方法 和產品工廠 根據引數例項化具體產品 三個部分。二 工廠方法模式 如果需要新增乙個產品,那麼簡單工廠模式就需要修改產品工廠...