工廠模式
1、概念
·工廠模式是我們最常用的實(shí)例化對(duì)象模式,是用工廠方法代替vnew操作的一種模式。
2、好處
·使用工廠模式的好處是,如果你想要更改所實(shí)例化的類名等,則只需更改該工廠方法內(nèi)容
即可,不需逐一尋找代碼中具體實(shí)例化的地方(new處)修改了。為系統(tǒng)結(jié)構(gòu)提供靈活的動(dòng)態(tài)擴(kuò)展機(jī)制,減少了耦合。
3、分類
·簡(jiǎn)單工廠模式
·工廠方法模式
·抽象工廠模式
簡(jiǎn)單工廠模式
·簡(jiǎn)單工廠模式實(shí)現(xiàn)了產(chǎn)品類的代碼跟客尸端代碼分離,但會(huì)有一個(gè)回題,優(yōu)秀的代碼是符合“開(kāi)閉原則”
如果你要加一個(gè)C類產(chǎn)品,你就要修改工廠類里面的代碼,也就是說(shuō)要增加條件語(yǔ)句如: switch---case。
對(duì)于這個(gè)問(wèn)題,接下來(lái)的工廠方法模式可以解決這個(gè)問(wèn)題。
工廠方法模式
工廠方法就是為配一個(gè)產(chǎn)品提供一個(gè)獨(dú)立的工廠類,通過(guò)不同的工廠實(shí)例來(lái)創(chuàng)建不同的產(chǎn)品實(shí)例。
優(yōu)點(diǎn):
1.擁有良好的封裝性,代碼結(jié)構(gòu)清晰。對(duì)于每一個(gè)對(duì)象的創(chuàng)建都是有條件約束的。
? 如:調(diào)用一個(gè)具體的產(chǎn)品對(duì)象,只需要知道這個(gè)產(chǎn)品的類名和約束參數(shù)就可以了,不用知道創(chuàng)建對(duì)象自身的復(fù)雜過(guò)程。降低模塊之間的耦合度。
2.擁有良好的擴(kuò)展性,新增一個(gè)產(chǎn)品類,只需要適當(dāng)?shù)脑黾庸S類或者擴(kuò)展一個(gè)工廠類,如下面的例子中,當(dāng)需要增加一個(gè)數(shù)據(jù)庫(kù)Oracle的操作,
? 則只需要增加一個(gè)Oracle類,廠類不用修改任務(wù)就可完成系統(tǒng)擴(kuò)展。
3.屏蔽產(chǎn)品類。這一特點(diǎn)非常重要,產(chǎn)品類的實(shí)現(xiàn)如何變化,調(diào)用者都不需要關(guān)心,它只需要關(guān)心產(chǎn)品的接口,只要接口保持不變,系統(tǒng)中的上層模塊就不要發(fā)生變化。
使用場(chǎng)景:
·1.支付寶、微信、銀聯(lián)的連接方式(cornectMode),支付方式(payMode)。使用工廠模式,
“客戶"就不需要要知道具體的連接方式和支付方式了,只需要調(diào)用connectMode和payMode即可。
2. MySQL、SQL Server、Oracle等數(shù)據(jù)庫(kù)的連接方式(connectMode)、查詢方式(selectMode)等操作可以使用工廠模式進(jìn)行封裝。
抽象工廠模式
1、抽象工廠模式的組成
·1.抽象工廠(AbstvactFactovy):確定工廠的業(yè)務(wù)范圍。
·2.具體工廠(ConcreteFactovy) :每個(gè)具體工廠對(duì)應(yīng)-一個(gè)產(chǎn)品族。具體工廠決定生產(chǎn)哪個(gè)具體產(chǎn)品對(duì)象。
·3.抽象產(chǎn)品(AbstractProduct):同--產(chǎn)品等級(jí)結(jié)構(gòu)的抽象類。
·4.具體產(chǎn)品(ConcreteProduct):可供生產(chǎn)的具體產(chǎn)品。
2、工廠方法模式的組成
·一個(gè)抽象產(chǎn)品類,可以派生出多個(gè)具體產(chǎn)品類。
·一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類?!っ總€(gè)具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例。
3、簡(jiǎn)單工廠模式的組成
·多個(gè)抽象產(chǎn)品類,每個(gè)抽象產(chǎn)品類可以派生出多個(gè)具體產(chǎn)品類一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類。
·每個(gè)具體工廠類可以創(chuàng)建多個(gè)具體產(chǎn)品類的實(shí)例。
4、三種工廠模式的比較
·簡(jiǎn)單工廠:用來(lái)生產(chǎn)同一等級(jí)結(jié)構(gòu)中的任意產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無(wú)能為力)
·工廠方法:用來(lái)生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品。(支持增加任意產(chǎn)品)
·抽象工廠:用來(lái)生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無(wú)能為力;支持增加產(chǎn)品族)