摘要:簡(jiǎn)單工廠,工廠模式和抽象工廠。不要認(rèn)為簡(jiǎn)單工廠是用就覺(jué)得一無(wú)是處,也不要覺(jué)得抽象工廠比較高大上就到處套。
工廠模式,實(shí)際上也會(huì)根據(jù)業(yè)務(wù)情景不同會(huì)有不同的實(shí)現(xiàn)方式。一般分為3種。簡(jiǎn)單工廠,工廠模式和抽象工廠。顧名思義,這三種從簡(jiǎn)單到抽象,名稱越來(lái)越高大上,實(shí)現(xiàn)方式肯定是越來(lái)越復(fù)雜
結(jié)論1:三種工廠的實(shí)現(xiàn)越來(lái)越復(fù)雜
簡(jiǎn)單工廠public class Factory { // 定義產(chǎn)品編號(hào) public int prodNo; // 構(gòu)造工廠時(shí)告知工廠產(chǎn)品標(biāo)識(shí) public Factory(int prodNo) { this.prodNo = prodNo; } public IProduct GetProduct() { // 根據(jù)產(chǎn)品標(biāo)識(shí)生產(chǎn)產(chǎn)品 switch (prodNo) { case prodNo1: return new ProductA(); break; case prodNo2: return new ProductB(); break; default: ... } } } // 產(chǎn)品A class ProductA implements IProduct { //產(chǎn)品屬性 //...... } //產(chǎn)品B class ProductB implements IProduct { //產(chǎn)品屬性 //...... } //產(chǎn)品接口 public interface IProduct { //產(chǎn)品方法 //...... }
簡(jiǎn)單工廠的問(wèn)題就在于swich case(或者if else)。每當(dāng)新增一種產(chǎn)品時(shí),你都需要去維護(hù)工廠中的判斷語(yǔ)句,造成該工廠類不斷增長(zhǎng),各種判斷擠在一起,給擴(kuò)展和維護(hù)帶來(lái)麻煩。產(chǎn)品和工廠沒(méi)有實(shí)現(xiàn)完全解耦,綁定在一起
結(jié)論2:簡(jiǎn)單工廠通過(guò)構(gòu)造時(shí)傳入的標(biāo)識(shí)來(lái)生產(chǎn)產(chǎn)品,不同產(chǎn)品都在同一個(gè)工廠中生產(chǎn),這種判斷會(huì)隨著產(chǎn)品的增加而增加,給擴(kuò)展和維護(hù)帶來(lái)麻煩
工廠模式// 工廠接口 interface IFactory { IProduct GetProduct(); } // A工廠類 class FactoryA implements IFactory { IProduct productA; public FactoryA() { this.productA = new ProductA(); } public IProduct GetProduct() //A工廠生產(chǎn)A產(chǎn)品 { return this.productA; } } //B工廠類 class FactoryB implements IFactory { IProduct productB; public FactoryB() { this.productB = new ProductB(); } public IProduct GetProduct() //B工廠生產(chǎn)B產(chǎn)品 { return this.productB; } } //產(chǎn)品接口 interface IProduct { //產(chǎn)品方法 //...... } //產(chǎn)品A class ProductA implements IProduct { //產(chǎn)品屬性 //...... } //產(chǎn)品B class ProductB implements IProduct { //產(chǎn)品屬性 //...... }
在工廠模式中,已經(jīng)將工廠類分開(kāi),不再將所有產(chǎn)品在同一工廠中生產(chǎn),解決了簡(jiǎn)單工廠中不斷增加的switch case的問(wèn)題。如再新增一個(gè)C產(chǎn)品,那么只需寫一個(gè)C工廠和C產(chǎn)品,在調(diào)用時(shí)用C工廠生產(chǎn)C產(chǎn)品即可,A和B工廠和產(chǎn)品完全不受影響
結(jié)論3:工廠模式無(wú)法解決產(chǎn)品族和產(chǎn)品等級(jí)結(jié)構(gòu)的問(wèn)題
抽象工廠實(shí)現(xiàn)不同的產(chǎn)品族,并且實(shí)現(xiàn)產(chǎn)品等級(jí)結(jié)構(gòu)
// 工廠接口,即抽象工廠 interface IFactory { IFridge CreateFridge(); IAirCondition CreateAirCondition(); } // 三星的工廠,生產(chǎn)三星的產(chǎn)品族 class SamsungFactory implements IFactory { public IAirCondition CreateAirCondition() { // 三星的工廠生產(chǎn)三星的空調(diào) return new SamsungAirCondition(); } public IFridge CreateFridge() { // 三星的工廠生產(chǎn)三星的冰箱 return new SamsungFridge(); } } // 格力的工廠,生產(chǎn)格力的產(chǎn)品族 class GreeFactry implements IFactory { public IAirCondition CreateAirCondition() { // 格力的工廠生產(chǎn)格力的空調(diào) return new GreeAirCondition(); } public IFridge CreateFridge() { // 格力的工廠生產(chǎn)格力的冰箱 return new GreeFridge(); } } // 冰箱產(chǎn)品接口 interface IFridge { // 冰箱產(chǎn)品接口 // 冰箱的action } // 空調(diào)接口 interface IAirCondition { // 空調(diào)產(chǎn)品接口 // 空調(diào)的action } // 三星的冰箱 public class SamsungFridge implements IFridge { // 三星冰箱的action和property } // 格力的冰箱 public class GreeFridge : IFridge { // 格力冰箱的action和property } // 三星的空調(diào) public class SamsungAirCondition implements IAirCondition { // 三星空調(diào)的action和property } // 格力的空調(diào) public class GreeAirCondition implements IAirCondition { / /格力空調(diào)的action和property }
在工廠模式中,一個(gè)工廠生產(chǎn)一個(gè)產(chǎn)品,所有的具體產(chǎn)品是由同一個(gè)抽象產(chǎn)品派生的,不存在產(chǎn)品等級(jí)結(jié)構(gòu)和產(chǎn)品族的概念;而在抽象工廠中,同一個(gè)等級(jí)的產(chǎn)品是派生于一個(gè)抽象產(chǎn)品(即產(chǎn)品接口),一個(gè)抽象工廠派生不同的具體工廠,每個(gè)具體工廠生產(chǎn)自己的產(chǎn)品族(包含不同產(chǎn)品等級(jí))
結(jié)論4:工廠模式中,一個(gè)工廠生產(chǎn)一個(gè)產(chǎn)品,所有產(chǎn)品派生于同一個(gè)抽象產(chǎn)品(或產(chǎn)品接口);而抽象工廠模式中,一個(gè)工廠生產(chǎn)多個(gè)產(chǎn)品,它們是一個(gè)產(chǎn)品族,不同的產(chǎn)品族的產(chǎn)品派生于不同的抽象產(chǎn)品(或產(chǎn)品接口)
三種工廠模式關(guān)鍵點(diǎn)三種工廠的實(shí)現(xiàn)是越來(lái)越復(fù)雜的
簡(jiǎn)單工廠通過(guò)構(gòu)造時(shí)傳入的標(biāo)識(shí)來(lái)生產(chǎn)產(chǎn)品,不同產(chǎn)品都在同一個(gè)工廠中生產(chǎn),這種判斷會(huì)隨著產(chǎn)品的增加而增加,給擴(kuò)展和維護(hù)帶來(lái)麻煩
工廠模式無(wú)法解決產(chǎn)品族和產(chǎn)品等級(jí)結(jié)構(gòu)的問(wèn)題
抽象工廠模式中,一個(gè)工廠生產(chǎn)多個(gè)產(chǎn)品,它們是一個(gè)產(chǎn)品族,不同的產(chǎn)品族的產(chǎn)品派生于不同的抽象產(chǎn)品(或產(chǎn)品接口)
工廠模式問(wèn)答在上面的代碼中,都使用了接口來(lái)表達(dá)抽象工廠或者抽象產(chǎn)品,那么可以用抽象類嗎?有何區(qū)別?
從功能上說(shuō),完全可以,甚至可以用接口來(lái)定義行為,用抽象類來(lái)抽象屬性。抽象類更加偏向于屬性的抽象,而用接口更加偏向行為的規(guī)范與統(tǒng)一。使用接口有更好的可擴(kuò)展性和可維護(hù)性,更加靈活實(shí)現(xiàn)松散耦合,所以編程原則中有一條是針對(duì)接口編程而不是針對(duì)類編程
到底何時(shí)應(yīng)該用工廠模式
根據(jù)具體業(yè)務(wù)需求。不要認(rèn)為簡(jiǎn)單工廠是用switch case就覺(jué)得一無(wú)是處,也不要覺(jué)得抽象工廠比較高大上就到處套。我們使用設(shè)計(jì)模式是為了解決問(wèn)題而不是炫技,所以根據(jù)三種工廠模式的特質(zhì),以及對(duì)未來(lái)擴(kuò)展的預(yù)期,來(lái)確定使用哪種工廠模式
說(shuō)說(shuō)你在項(xiàng)目中工廠模式的應(yīng)用
一個(gè)旅游產(chǎn)品的B2B網(wǎng)站,根據(jù)不同類型的業(yè)務(wù)形態(tài),產(chǎn)品也是不同的,有國(guó)內(nèi)跟團(tuán),出境跟團(tuán),國(guó)內(nèi)自由行,出境自由行,郵輪五種產(chǎn)品,并且后面可能還會(huì)有門票,酒店,機(jī)票等等產(chǎn)品,其中有些聯(lián)系也有些區(qū)別
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/66493.html
摘要:與以往的使用的方式不同,工廠模式使用工廠實(shí)例化對(duì)象。抽象工廠模式亮相抽象工廠模式抽象工廠模式提供一個(gè)接口,用于創(chuàng)建相關(guān)或依賴對(duì)象的家族,而不需要明確指定具體類。 寫在前面 這篇博文介紹設(shè)計(jì)模式的形式將與其他篇博文不太一樣,這里我們將從一個(gè)問(wèn)題入手,逐步了解到簡(jiǎn)單工廠、工廠方法與抽象工廠模式。 PS:這篇博文涉及的內(nèi)容較多,所以篇幅有點(diǎn)長(zhǎng),請(qǐng)耐心閱讀。 為什么要使用工廠模式? 在 OO ...
摘要:我認(rèn)為按書(shū)上的順序比較好理解因?yàn)楹?jiǎn)單靜態(tài)工廠模式是在工廠方法模式上縮減,抽象工廠模式是在工廠方法模式上再增強(qiáng)。所以我就先講工廠方法模式了。抽象工廠模式抽象工廠模式就比較復(fù)雜了,我們一般的應(yīng)用都寫不到。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡(jiǎn)單啦 單例模式你會(huì)幾種寫法? 昨天寫了單例模式了,今天是時(shí)候?qū)懝S模式啦~ 工廠模式我個(gè)人認(rèn)為其實(shí)比...
摘要:一簡(jiǎn)單工廠定義簡(jiǎn)單工廠其實(shí)并不屬于種設(shè)計(jì)模式之一,該模式是工廠方法模式的弱化或者說(shuō)是工廠方法模式的一種特例,因?yàn)楹?jiǎn)單,所以稱為簡(jiǎn)單工廠模式,也叫做靜態(tài)工廠模式。 一、簡(jiǎn)單工廠 定義 簡(jiǎn)單工廠其實(shí)并不屬于23種GOF設(shè)計(jì)模式之一,該模式是工廠方法模式的弱化(或者說(shuō)是工廠方法模式的一種特例),因?yàn)楹?jiǎn)單,所以稱為簡(jiǎn)單工廠模式(Simple Factory Pattern),也叫做靜態(tài)工廠模式...
摘要:又稱為多態(tài)性工廠模式或虛擬構(gòu)造子模式。簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式又稱為靜態(tài)工廠方法模式,它屬于類創(chuàng)建型模式。多態(tài)性設(shè)計(jì)工廠方法模式之所以又被稱為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類都具有同一抽象父類。 點(diǎn)擊進(jìn)入我的博客 2.1 簡(jiǎn)單工廠模式 2.1.1 工廠模式的幾種形態(tài) 工廠模式主要用一下幾種形態(tài): 簡(jiǎn)單工廠(Simple Factory):專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他...
閱讀 1008·2021-11-15 11:38
閱讀 2712·2021-09-08 09:45
閱讀 2987·2021-09-04 16:48
閱讀 2714·2019-08-30 15:54
閱讀 1052·2019-08-30 13:57
閱讀 1735·2019-08-29 15:39
閱讀 614·2019-08-29 12:46
閱讀 3638·2019-08-26 13:39