1、工廠(chǎng)模式可以分為三類(lèi):
1)簡(jiǎn)單工廠(chǎng)模式(Simple Factory)
2)工廠(chǎng)方法模式(Factory Method)
3)抽象工廠(chǎng)模式(Abstract Factory)
2、抽象工廠(chǎng)模式與工廠(chǎng)方法模式的區(qū)別:
工廠(chǎng)方法模式:
一個(gè)抽象產(chǎn)品類(lèi),可以派生出多個(gè)具體產(chǎn)品類(lèi)。
一個(gè)抽象工廠(chǎng)類(lèi),可以派生出多個(gè)具體工廠(chǎng)類(lèi)。
每個(gè)具體工廠(chǎng)類(lèi)只能創(chuàng)建一個(gè)具體產(chǎn)品類(lèi)的實(shí)例。
抽象工廠(chǎng)模式:
多個(gè)抽象產(chǎn)品類(lèi),每個(gè)抽象產(chǎn)品類(lèi)可以派生出多個(gè)具體產(chǎn)品類(lèi)。
一個(gè)抽象工廠(chǎng)類(lèi),可以派生出多個(gè)具體工廠(chǎng)類(lèi)。
每個(gè)具體工廠(chǎng)類(lèi)可以創(chuàng)建多個(gè)具體產(chǎn)品類(lèi)的實(shí)例。
區(qū)別:
工廠(chǎng)方法模式只有一個(gè)抽象產(chǎn)品類(lèi),而抽象工廠(chǎng)模式有多個(gè)。
工廠(chǎng)方法模式的具體工廠(chǎng)類(lèi)只能創(chuàng)建一個(gè)具體產(chǎn)品類(lèi)的實(shí)例,而抽象工廠(chǎng)模式可以創(chuàng)建多個(gè)。
3、簡(jiǎn)單工廠(chǎng)模式(靜態(tài)工廠(chǎng)方法模式):
建立一個(gè)工廠(chǎng)(一個(gè)函數(shù)或一個(gè)類(lèi)方法)來(lái)制造新的對(duì)象。它存在的目的很簡(jiǎn)單:定義一個(gè)用于創(chuàng)建對(duì)象的接口。
比如:客戶(hù)需要知道怎么去創(chuàng)建一款車(chē),客戶(hù)和車(chē)就緊密耦合在一起了.為了降低耦合,就出現(xiàn)了工廠(chǎng)類(lèi),把創(chuàng)建寶馬的操作細(xì)節(jié)都放到了工廠(chǎng)里面去,客戶(hù)直接使用工廠(chǎng)的創(chuàng)建工廠(chǎng)方法,傳入想要的寶馬車(chē)型號(hào)就行了,而不必去知道創(chuàng)建的細(xì)節(jié).這就是工業(yè)革命了:簡(jiǎn)單工廠(chǎng)模式:
4、工廠(chǎng)方法模式:
工廠(chǎng)方法模式去掉了簡(jiǎn)單工廠(chǎng)模式中工廠(chǎng)方法的靜態(tài)屬性,使得它可以被子類(lèi)繼承。這樣在簡(jiǎn)單工廠(chǎng)模式里集中在工廠(chǎng)方法上的壓力可以由工廠(chǎng)方法模式里不同的工廠(chǎng)子類(lèi)來(lái)分擔(dān)。
例如:當(dāng)客戶(hù)不再滿(mǎn)足現(xiàn)有的車(chē)型號(hào)的時(shí)候,想要一種速度快的新型車(chē)
在以下情況要使用到工廠(chǎng)方法模式:
1)當(dāng)客戶(hù)程序不需要知道要使用對(duì)象的創(chuàng)建過(guò)程。
2)客戶(hù)程序使用的對(duì)象存在變動(dòng)的可能,或者根本就不知道使用哪一個(gè)具體的對(duì)象。
5、抽象工廠(chǎng)模式:
抽象工廠(chǎng)模式和工廠(chǎng)方法模式的區(qū)別就在于需要?jiǎng)?chuàng)建對(duì)象的復(fù)雜程度上。而且抽象工廠(chǎng)模式是三個(gè)里面最為抽象、最具一般性的。
例如:隨著客戶(hù)的要求越來(lái)越高,寶馬車(chē)需要配置空調(diào)。于是這個(gè)工廠(chǎng)開(kāi)始生產(chǎn)寶馬車(chē)和配置需要的空調(diào)。這時(shí)候工廠(chǎng)有二個(gè)系列的產(chǎn)品:寶馬車(chē)和空調(diào).寶馬車(chē)必須使用對(duì)應(yīng)的空調(diào)才能使用.這時(shí)候分別使用一個(gè)車(chē)工廠(chǎng)和一個(gè)空調(diào)工廠(chǎng)都不能滿(mǎn)足我們的需求,我們必須確認(rèn)車(chē)跟空調(diào)的對(duì)應(yīng)關(guān)系。因此把車(chē)工廠(chǎng)跟空調(diào)工廠(chǎng)聯(lián)系在一起。因此出現(xiàn)了抽象工廠(chǎng)模式。
抽象工廠(chǎng)模式的用意為:給客戶(hù)端提供一個(gè)接口,可以創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象 ,而且使用抽象工廠(chǎng)模式還要滿(mǎn)足一下條件:
1)系統(tǒng)中有多個(gè)產(chǎn)品族,而系統(tǒng)一次只可能消費(fèi)其中一族產(chǎn)品。
2)同屬于同一個(gè)產(chǎn)品族的產(chǎn)品一起使用。