西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識 → 設(shè)計模式之工廠模式與抽象工廠模式

設(shè)計模式之工廠模式與抽象工廠模式

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/12/5 17:38:48字體大小:A-A+

作者:西西點擊:21次評論:0次標(biāo)簽: 設(shè)計模式

QQ音樂2016V12.57.3804.412 官方正式版
  • 類型:音頻播放大。21.5M語言:中文 評分:9.2
  • 標(biāo)簽:
立即下載

剛接觸設(shè)計模式的第一課,工廠模式與抽象工廠,確實感覺到了設(shè)計模式的抽象與強大作用力,學(xué)習(xí)過程中自己動手設(shè)計了一個小游戲的角色。

假定一個游戲中有很多怪物角色,如蜘蛛,馬,猴子,等,此游戲有多種游戲級別,先假定為3級。

設(shè)計游戲時必須考慮到:

1,游戲的角色可擴展性

2,游戲易于維護(如,游戲中怪物角色易于管理)

暫時不考慮其他的問題,先說說角色的設(shè)計問題。

游戲中有很多怪物角色,也分為三級,即怪物也有三個級別,那么,怎么設(shè)計角色的繼承體系呢?

至少有以下兩種策略:

a),游戲維護一個怪物超類,所有怪物直接繼承,將這些子類再作為超類,供“三個級別”怪物類繼承,類結(jié)構(gòu)大致為:

CMonster

CHouse :public CMonster,......

CHighLevelHouse :public CHouse,CLowLevelHouse :public CHouse.....

b),游戲維護一個怪物超類,讓三個級別繼承此超類,再分別讓每個怪物繼承之,類結(jié)構(gòu)大致為:

CMonster

CHighLevelMonster : public CMonster,CLowLevelMonster : public CMonster.......

CHighLevelHouse : public CHighLevelMonster,CLowLevelHouse: public CLowLevelMonster....

暫且不論這兩種繼承方案怎樣,下面就這兩種方案分別使用工廠模式和抽象工廠得到怪物對象。

一,使用工廠模式

使用工廠模式的目的在于代碼的客戶不需要親自實例化一個對象,客戶只需要操心:“我要得到什么”,而不用操心:“我要使用哪一個具體的類去獲得”;考慮在可預(yù)見的將來客戶需要的對象改變了,那么,他是否不得不去更改那一段new Chouse()的代碼?但如果使用工廠方法,替代這種“硬編碼”,或言之“過程性編碼”,則他不需要更改任何代碼,而只需要更改工廠里生產(chǎn)此對象的方法,將生產(chǎn)的對象替換一下就能做到。這是很具有優(yōu)越性的,假定程序中出現(xiàn)了一萬次new Chouse(),后來我們不再需要Chouse這個對象,而是需要重寫或者有較Chouse有大更改的ChouseChanged 類實例,這就意味著一天悲慘的查找->替換工作的開始!但如果使用了工廠方法,以一種封閉的方法產(chǎn)生客戶需要的對象,就只需要在工廠內(nèi)部修改生成的方法,替換一次即可!

以上是使用的目的!但如何使用呢,下面就來深入的了解工廠模式。工廠從某種角度上就是一種透明的機器,這種機器有很多型號,有的能生產(chǎn)猴子對象,有的能生成蜘蛛對象,等等。那么,為什么不是“一部透明的機器”呢,因為它要生產(chǎn)很多種對象,“一部機器”是不能生產(chǎn)末知種類,末知數(shù)量的對象的。那,為什么不將某參數(shù)傳入此機器,讓它能根據(jù)參數(shù)生產(chǎn)特定的對象呢?答案在于,可擴展性。如前所言,工廠并不知道它要生產(chǎn)怎樣的對象,生產(chǎn)多少種類型的對象,如果單純地以參數(shù)去界定,若以后再增加了一/多種對象,則還需要修改工廠的生產(chǎn)方法,可能是增加switch里面的case語句,這樣就涉及到維護問題了,一旦忘記,則導(dǎo)致新加的對象創(chuàng)建不成功!記住,工廠本應(yīng)是一個抽象的概念,不是一個具體的概念。所以生產(chǎn)多種對象,必須有多種具體的工廠!如,生產(chǎn)猴子的猴子工廠,生產(chǎn)蜘蛛的蜘蛛工廠,等。這就是工廠模式。

二,使用抽象工廠模式

再來說說抽象工廠模式,其實本人覺得抽象工廠模式也就是工廠模式,只是它是前一種模式復(fù)雜一些的模式,但本質(zhì)還是一樣的,如果你會用工廠模式,那么你一定會用抽象工廠模式!

已經(jīng)知道了為什么要使用工廠模式,現(xiàn)在讓我們開始分析在那個游戲中,怎樣通過工廠模式去獲得怪物。

現(xiàn)在的情況稍微復(fù)雜了一些,增加了游戲的難易級別,則不能簡單的直接使用工廠模式,因為無法滿足三個級別的限制,那么,抽象工廠便出現(xiàn)了,其實質(zhì)是將工廠再次向上抽象,產(chǎn)生繼承得到多個抽象的工廠。

考慮將工廠歸類,則至少有以下兩種策略:

a),定義三個“級別工廠”:高級怪物工廠,中級怪物工廠,低級怪物工廠,讓每個工廠去生產(chǎn)所有類型的怪物

b),定義多個“怪物工廠”:猴子工廠,蜘蛛工廠,馬工廠,讓每個工廠去生產(chǎn)三種怪物(高級,中級,低級)

首先,我們先決策哪一種策略更優(yōu),把“更優(yōu)”換一種說法,即是文章最開始說到的兩個條件:可擴展性,可維護性。先考察可擴展性:假設(shè)游戲以后增加了幾十種,幾百種,新的怪物,則b中的怪物工廠則飆增到相同的數(shù)目,相比之下 a 中的工廠數(shù)目則不會增加。但 a 也會付出慘重的代價:每個工廠里面,增加幾十個,幾百個生產(chǎn)對象的方法。有一個經(jīng)驗,“集中地增加代碼,而不是分散地增加或者修改既有代碼”往往表現(xiàn)出更優(yōu)的可擴展性。顯然,定義怪物工廠可獲得更好的可擴展性。因為在b中,新增加一種怪物,只需要增加一個工廠,同時在里面寫入三個方法分別產(chǎn)生三種級別的怪物即可,相比a中的在三個工廠中都增加一個方法(不能遺忘),顯然更優(yōu)一些!但b也不是最優(yōu)解,因為如果游戲級別一旦增加,則需要在每個怪物工廠中去增加相應(yīng)的代碼,而a中則只需要再新增加一個工廠,并將其它工廠里的代碼直接拷到下面即可工作。但我們之前有約定:怪物的易變性大于級別的易變性,畢竟,一個游戲的游戲級別是不會常變的,這也符合假定!如果要徹底解決這個問題,我們得時刻記住一句話:“永遠要對變化的東西抽象(封裝)”。于是,我們自然會想到,使用繼承去獲得游戲級別變化下的可擴展性,我們可以在b的基礎(chǔ)上再使用一層抽象,讓怪物工廠里的生產(chǎn)怪物的方法是抽象的,(C++里使用vitual修飾),讓每個怪物工廠被三個類(目前是三個級別)去繼承,可能是這樣的類結(jié)構(gòu):

CFactory

CHouseFactory : public CFactory,CMonkeyFactory : public CFactrory,.......

CHighLevelFactory : public CHosueFactory,CLowLevelFactory : public CHouseFactory....

這樣會獲得完全的擴展性,但與之相應(yīng)的代價是子類膨脹問題,子類巨多!每個怪物工廠類有三個子類!

這里可以做權(quán)衡,減少可擴展性,增加新函數(shù)代替子類:可能的結(jié)構(gòu)如下:

CFactory

{

 virtual CHighLevelMonster* getHighLevelMonster();

   virtual CMiddleLevelMonster* getMiddleLevelMonster();

   virtual CLowLevelMonster* getLowLevelMonster();

 //可能只有這三種級別

}

CHouseFactory : public CFactory

{

 CHighLevelMonster* getHighLevelMonster();

   CMiddleLevelMonster* getMiddleLevelMonster();

   CLowLevelMonster* getLowLevelMonster();

}

說明:

1,在超類工廠CFactory中任何獲得對象的方法都是virtual的

2,抽象工廠中的獲得對象的方法的返回值類型必定不同!(第一個是CHighLevelMonster*,第二個是CMiddleLevelMonster*,第三個是CLowLevelMonster*)。謹記:如果它們的返回值一樣,則退化為了工廠模式,而不是抽象工廠模式!之所以叫抽象工廠,是因為抽象工廠一旦實例化,則可以實例化為多種類型的工廠,每一種工廠用來生產(chǎn)相關(guān),但不同類型的對象,各種實例化出來的工廠之間的差別在于,它們生產(chǎn)這些對象的方式或者結(jié)果不同!游戲需要三種級別的怪物,則每個工廠按自己的方式去生成它們,(“不同的方式”體現(xiàn)在,每個工廠生產(chǎn)出的怪物(即使級別相同,但)不同)

三,反過來再談繼承方案

在文章的最開始,我們提出了兩種繼承策略,

a),游戲維護一個怪物超類,所有怪物直接繼承,將這些子類再作為超類,供“三個級別”怪物類繼承,類結(jié)構(gòu)大致為:

CMonster

CHouse :public CMonster,......

CHighLevelHouse :public CHouse,CLowLevelHouse :public CHouse.....

b),游戲維護一個怪物超類,讓三個級別繼承此超類,再分別讓每個怪物繼承之,類結(jié)構(gòu)大致為:

CMonster

CHighLevelMonster : public CMonster,CLowLevelMonster : public CMonster.......

CHighLevelHouse : public CHighLevelMonster,CLowLevelHouse: public CLowLevelMonster....

我們前面使用的抽象工廠模式正是基于的第二種繼承方案,所以被抽象的工廠是“怪物工廠”,而不是“級別工廠”,然后在各個工廠里生產(chǎn)出的是不同級別的怪物。若我們使用第一種繼承方案,由正好對應(yīng)了將工廠歸類中的 a) ,定義三個“級別工廠”:高級怪物工廠,中級怪物工廠,低級怪物工廠,讓每個工廠去生產(chǎn)所有類型的怪物此時,形成的是“級別工廠”,在每個級別工廠里,生產(chǎn)出的是級別相同但屬性不同的怪物,可能的代碼是這樣的:

CFactory

{

 virtual CMonkey* getMonkey();

   virtual CHouse* getHouse();

   virtual CSpiter* getSpiter();

  .............//省略掉其它怪物

}

CHighLevelFactory : public CFactory

{

   CMonkey* getMonkey();

   CHouse* getHouse();

   CSpiter* getSpiter();

   ....................

}

根據(jù)之前的討論,b)方法的抽象工廠模式較好,所以繼承方案應(yīng)該是后一種要好一些

四,結(jié)語

經(jīng)過之前的分析,對工廠模式和抽象工廠模式有了一定的認識,可能還存在不足之處,望讀者指出,一同探討!

    無損音樂播放器
    (18)無損音樂播放器
    現(xiàn)在的人們對音樂的質(zhì)量越來越高,不是無損的音樂根本都聽不進去,什么是無損音樂呢常見到的被稱為有損壓縮,有損壓縮顧名思義就是降低音頻采樣頻率與比特率,輸出的音頻文件會比原文件小。另一種音頻壓縮被稱為無損壓縮,能夠在保存原文件的所有數(shù)據(jù)的前提下,將音頻文件的體積壓縮的更小,而將壓縮后的音頻文件還原后,能夠?qū)崿F(xiàn)與源文件相同的大小相同的碼率。無損壓縮格式有,而常見的主流的無損壓縮格式目前有。西西小編給大家...更多>>
    • 酷狗音樂2016V8.0.4.6官方正式版

      04-19 / 33.6M

      推薦理由:酷狗音樂2015版本特色,占用資源極少,啟動速度更快,內(nèi)存及資源占用更少,軟件更穩(wěn)定;強大的流行音樂搜索
    • Foobar20001.3.10 Final Asion漢化

      03-31 / 6.9M

      推薦理由:Foobar2000是一個Windows平臺下的高級音頻播放器,支持的音頻格式:MP3,MP4,AAC,CDAudio,WMA,Vorbis,FLAC,Wa
    • 千千靜聽v8.2.12官方最新版

      07-31 / 5.5M

      推薦理由:千千靜聽音樂播放器到現(xiàn)在也并沒有改走華麗路線,仍然是很簡潔樸素的界面和內(nèi)容,但是熱門歌曲更新上面也并
    • QQ音樂2016V12.57.3804.412 官方

      04-13 / 21.5M

      推薦理由:QQ音樂是中國最大的網(wǎng)絡(luò)音樂平臺,是中國互聯(lián)網(wǎng)領(lǐng)域領(lǐng)先的正版數(shù)字音樂服務(wù)提供商,是騰訊公司推出的一款免
    • 百度音樂播放器2016v9.2.14 官方最

      04-22 / 7.3M

      推薦理由:千千靜聽官方下載版是一款完全免費的音樂播放軟件,擁有自主研發(fā)的全新音頻引擎,集播放、音效、轉(zhuǎn)換、歌詞
    • 酷我音樂盒20168.1.2.0 官方正式版

      02-25 / 11.6M

      推薦理由:酷我音樂2014是酷我音樂盒出品的最新款音樂播放器,具有界面親和度高,支持格式廣泛,音質(zhì)好的特點!酷我音
    mp3播放器
    (9)mp3播放器
    大多數(shù)網(wǎng)友上網(wǎng)都會聽歌,有的網(wǎng)友對音質(zhì)要求非常高,到底哪款播放器好呢目前就西西小編對市場上的播放器來看,數(shù)百度音樂播放器的音質(zhì)是最好的了,無論是高品質(zhì)還是無損的都非常不錯,F(xiàn)在的主流音樂播放器都支持格式,音樂酷我音樂酷狗等都支持大部分音頻格式,所以好用的播放器有很多,小編在此推薦給大家的全是播放器下載排行榜里的好播放器,希望大家喜歡。...更多>>
    • Foobar20001.3.10 Final Asion漢化

      03-31 / 6.9M

      推薦理由:Foobar2000是一個Windows平臺下的高級音頻播放器,支持的音頻格式:MP3,MP4,AAC,CDAudio,WMA,Vorbis,FLAC,Wa
    • QQ音樂2016V12.57.3804.412 官方

      04-13 / 21.5M

      推薦理由:QQ音樂是中國最大的網(wǎng)絡(luò)音樂平臺,是中國互聯(lián)網(wǎng)領(lǐng)域領(lǐng)先的正版數(shù)字音樂服務(wù)提供商,是騰訊公司推出的一款免
    • 酷狗音樂2016V8.0.4.6官方正式版

      04-19 / 33.6M

      推薦理由:酷狗音樂2015版本特色,占用資源極少,啟動速度更快,內(nèi)存及資源占用更少,軟件更穩(wěn)定;強大的流行音樂搜索
    • 千千靜聽v8.2.12官方最新版

      07-31 / 5.5M

      推薦理由:千千靜聽音樂播放器到現(xiàn)在也并沒有改走華麗路線,仍然是很簡潔樸素的界面和內(nèi)容,但是熱門歌曲更新上面也并
    • 百度音樂播放器2016v9.2.14 官方最

      04-22 / 7.3M

      推薦理由:千千靜聽官方下載版是一款完全免費的音樂播放軟件,擁有自主研發(fā)的全新音頻引擎,集播放、音效、轉(zhuǎn)換、歌詞
    • k歌達人電腦版v5.3.7 官網(wǎng)最新版

      04-11 / 16.4M

      推薦理由:k歌達人電腦版這款應(yīng)用最先在ios平臺火起來,后來移植到android平臺后持續(xù)升溫,F(xiàn)已經(jīng)是一款成功的k歌娛樂
    音樂下載軟件
    (21)音樂下載軟件
    西西軟件園提供好用的音樂下載軟件,喜歡聽歌的朋友很多,那么有什么好用的軟件提供音樂下載呢西西小編就推薦幾款給大家使用,有常見的播放器音樂下載工具,還有給發(fā)燒友準(zhǔn)備的無損音樂下載工具哦。操作都很簡單,常見的播放器音樂下載大家應(yīng)該都很清楚,無損音樂則需要大家搜索下載,麻煩了一點而已。...更多>>
    • 酷狗音樂2016V8.0.4.6官方正式版

      04-19 / 33.6M

      推薦理由:酷狗音樂2015版本特色,占用資源極少,啟動速度更快,內(nèi)存及資源占用更少,軟件更穩(wěn)定;強大的流行音樂搜索
    • 百度音樂播放器2016v9.2.14 官方最

      04-22 / 7.3M

      推薦理由:千千靜聽官方下載版是一款完全免費的音樂播放軟件,擁有自主研發(fā)的全新音頻引擎,集播放、音效、轉(zhuǎn)換、歌詞
    • 酷我音樂盒20168.1.2.0 官方正式版

      02-25 / 11.6M

      推薦理由:酷我音樂2014是酷我音樂盒出品的最新款音樂播放器,具有界面親和度高,支持格式廣泛,音質(zhì)好的特點!酷我音
    • QQ音樂2016V12.57.3804.412 官方

      04-13 / 21.5M

      推薦理由:QQ音樂是中國最大的網(wǎng)絡(luò)音樂平臺,是中國互聯(lián)網(wǎng)領(lǐng)域領(lǐng)先的正版數(shù)字音樂服務(wù)提供商,是騰訊公司推出的一款免
    • QQ空間音樂下載器1.65 免費綠色版

      07-08 / 549KB

      推薦理由:QQ空間音樂下載器 1、用 IE 之類的網(wǎng)頁瀏覽器打開你要下載的 QQ空間。2 、將本界面上的藍色方塊拖拽到該 Q
    • 豆瓣音樂下載器1.0.3綠色版

      06-04 / 15KB

      推薦理由:豆瓣音樂下載器 下載豆瓣音樂電臺工具 豆瓣音樂/豆瓣電臺紅心頻道打包下載工具 界面很..簡潔,擁有兩個功
    qq音樂2015
    (17)qq音樂2015
    不是每天都會有獨家音樂推薦,但是每天都可以在這里知道哪些歌曲最好聽音樂,音樂你的生活。音樂官方介紹音樂是中國最大的網(wǎng)絡(luò)音樂平臺,是中國互聯(lián)網(wǎng)領(lǐng)域領(lǐng)先的正版數(shù)字音樂服務(wù)提供商,始終走在音樂潮流最前端,向廣大用戶提供方便流暢的在線音樂和豐富多彩的音樂社區(qū)服務(wù)。音樂音樂是騰訊公司推出的跨平臺多終端的免費音樂服務(wù),為您提供海量樂庫在線試聽卡拉歌詞在線首發(fā)列表漫游音樂分享等豐富多彩的音樂社區(qū)服務(wù)綠鉆貴族還可...更多>>
    • QQ音樂2016V12.57.3804.412 官方

      04-13 / 21.5M

      推薦理由:QQ音樂是中國最大的網(wǎng)絡(luò)音樂平臺,是中國互聯(lián)網(wǎng)領(lǐng)域領(lǐng)先的正版數(shù)字音樂服務(wù)提供商,是騰訊公司推出的一款免
    • qq音樂2014 純凈版11.23.3120 去廣

      09-22 / 9.8M

      推薦理由:QQ音樂提供海量樂庫在線試聽、最流行新歌在線首發(fā)、手機鈴聲下載、高品質(zhì)音樂試聽、正版音樂下載、免費空間
    • QQ音樂播放器v11.11 官方最新版

      08-01 / 12.8M

      推薦理由:QQ音樂通過貼心的設(shè)計、卓越的體驗、海量的曲庫、最新的流行音樂、專業(yè)的分類、豐富的空間背景音樂、音樂分
    • qq音樂 for iphoneV5.2.3 官方版

      08-20 / 70M

      推薦理由:iphone版qq音樂下載,iphoneQQ音樂,騰訊公司開發(fā)的針對中國用戶的iphone網(wǎng)絡(luò)音樂播放工具。軟件擁有海量正
    • QQ音樂2015綠色版v12.53.3740 去廣

      03-06 / 22.4M

      推薦理由:QQ音樂提供海量樂庫在線試聽、最流行新歌在線首發(fā)、手機鈴聲下載、高品質(zhì)音樂試聽、正版音樂下載、免費空間
    • QQ音樂無損下載工具v1.1.3 綠色免費

      09-26 / 47KB

      推薦理由:免費使用QQ音樂綠鉆特權(quán)下載高品質(zhì)音樂和無損音樂,親測可用,灰常好用哈!!具體操作方法就更簡單了,就是
    音樂播放器排行榜
    (19)音樂播放器排行榜
    電腦音樂播放器國內(nèi)用戶使用最多的應(yīng)該就是酷狗音樂了,這款播放器在國內(nèi)算是當(dāng)家花旦,另外千千靜聽曾經(jīng)在上可是占有很大一席的,現(xiàn)在改名為百度音樂喜歡千千靜聽的朋友可以選擇百度音樂,酷我音樂盒是后起之秀不過卻是長江后浪推前浪用戶積累量逐日升高,另外還有些國外的播放器例如本頁面都有提供下載。西西為大家精選出了音悅臺酷我音樂盒酷狗音樂等諸多熱門的電腦音樂播放器下載。...更多>>

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)