二 工廠模式詳解

2021-09-06 04:08:54 字數 2979 閱讀 3021

從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(static factory

method)模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現

以下為uml圖 :

可以看出,上面總共有三種類,乙個是工廠類creator,乙個是產品介面iproduct,乙個便是具體的產品,例如產品a和產品b,這之中,工廠類負責整個建立產品的邏輯判斷,所以為了使工廠類能夠知道我們需要哪一種產品,我們需要在建立產品時傳遞給工廠類乙個引數,去表明我們想要建立哪種產品。

產品介面 :

public inte***ce fruits
具體產品 :

@override

public void taste()

}

public class orange implements fruits 

}

簡單產品工廠 :

public class fruitsfactory 

// 根據 name 建立特定的具體產品

public static fruits creator(string name)

return fruits;}}

以上就是簡單工廠模式具體實現。實現過程 簡單、粗暴,但是一旦新增具體產品 比如香蕉 那麼我們需要增加乙個 香蕉介面(新增拓展) 同時修改 工廠類fruitsfactory

的switch分支(修改) 這樣違背了 開-閉原則 故此工廠方法模式應運而生

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

大概意思就是 我們把工廠抽象出來定義乙個工廠介面,而具體的建立工作推遲到具體的工廠類。它是對簡單工廠模式中的工廠類進一步抽象化,從而產生乙個工廠類的抽象和實現體系,從而彌補簡單工廠模式對修改開放的詬病。

以下為uml圖 :

ctreator 為抽象工廠 定義乙個返回抽象產品的介面方法,每種具體的產品都有屬於自己的產品創造工廠 **如下。

抽象工廠 :

// 抽象工廠

public inte***ce abstractfactory

抽象產品 :

public inte***ce fruits
真實產品類 :

@override

public void taste()

}public class orange implements fruits }

具體產品工廠類 :

@override

public fruits creator()

}public class orangefactor implements abstractfactory }

測試類 :

public  class factorytest 

}

當我們需要增加新的具體產品時 只需要增加相應的產品類、產品工廠類即可。這樣就保證了 開-閉原則 不再被破壞。

上面例子中產品都是水果,有的時候我們也需要增加另外一些抽象產品。笨拙的方法是

照葫蘆畫瓢,對新增的抽象產品依次建立抽象產品、抽象工廠、產品、產品工廠。當抽象產品越來越多時,我們的類維護起來就有些麻煩了,如此抽象工廠模式應運而生。

抽象工廠模式算是工廠相關模式的終極形態,它與上面的工廠方法唯一的區別就是工廠的介面裡是一系列創造抽象產品的方法,而不再是乙個,而相應的,抽象產品也不再是乙個了,而是一系列相關的產品。

以下為uml圖 :

抽象工廠 :

// 抽象工廠 返回多種抽象產品

public inte***ce abstractfactory

抽象產品 :

public inte***ce fruits 

public inte***ce animal

具體產品 :

@override

public void taste()

}public class orange implements fruits

}public class cat implements animal

}public class dog implements animal }

真實工廠 :

public class factorya implements abstractfactory 

@override

public animal creatoranimals()

}public class factoryb implements abstractfactory

@override

public animal creatoranimals()

}

測試** :

public  class factorytest 

}

設計模式詳解(二) 抽象工廠模式

前面介紹了簡單工廠模式和工廠方法模式。但是這兩種模式對應的工廠結構過於單一 乙個工廠只能生產一種產品 不適應與一些複雜的工廠等級結構,強行使用會導致工廠類的職責過於繁重,違反單一職責原則。因此我們推出抽象工廠模式。a b工廠分別生產聯想和戴爾品牌的筆記本,其元件包括主機板 螢幕 cpu 電源等,為了...

詳解工廠模式

工廠模式是建立模式,主要是為建立物件提供過渡介面 以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。工廠模式在 深入淺出設計模式 和 大話設計模式 中分為三類 這三種模式從上到下逐步抽象,並且更具有一般性。我剛開始看著 大話設計模式 學習,抽象工廠還沒看到,所以這一篇就先記一下前兩種,後面...

工廠模式詳解

簡單工廠模式是由乙個工廠物件根據收到的訊息決定要建立哪乙個類的物件例項。工廠類負責建立的物件比較少,客戶只需要傳入工廠類引數,對於如何建立物件 邏輯 不關心。簡單工廠模式很容易違反高內聚低耦合的原則,因此一般只在很簡單的情況下使用。最大的優點在於工廠類中包含了必要的邏輯,根據客戶需要的邏輯動態例項化...