最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

游戲編程模式-享元模式,池類(lèi)技術(shù),原型模式

2022-06-10 12:22 作者:YONCE1999  | 我要投稿


享元模式與池類(lèi)技術(shù)

享元模式(Flyweight Pattern):?運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度對(duì)象的復(fù)用。系統(tǒng)只使用少量的對(duì)象,而這些對(duì)象都很相似,狀態(tài)變化很小,可以實(shí)現(xiàn)對(duì)象的多次復(fù)用。

當(dāng)我們需要重復(fù)使用一個(gè)對(duì)象的時(shí)候,如果重復(fù)創(chuàng)建對(duì)象,會(huì)讓內(nèi)存消耗越來(lái)越大。能不能創(chuàng)建了第一次之后,如果需要再次使用,再直接使用之前已經(jīng)創(chuàng)建的對(duì)象呢。讓一個(gè)對(duì)象可以共享,享元模式就是實(shí)現(xiàn)這樣的功能。

同樣的對(duì)象池、連接池(比如數(shù)據(jù)庫(kù)連接池)、線(xiàn)程池等也是為了復(fù)用,但其與享元模式的復(fù)用有區(qū)別的。

池化技術(shù)中的“復(fù)用”可以理解為“重復(fù)使用”,主要目的是節(jié)省時(shí)間(比如從對(duì)象池中取一個(gè)對(duì)象,不需要重新創(chuàng)建)。在任意時(shí)刻,每一個(gè)對(duì)象、連接、線(xiàn)程,并不會(huì)被多處使用,而是被一個(gè)使用者獨(dú)占,當(dāng)使用完成之后,放回到池中,再由其他使用者重復(fù)利用。享元模式中的“復(fù)用”可以理解為“共享使用”,在整個(gè)生命周期中,都是被所有使用者共享的,主要目的是節(jié)省空間。學(xué)到這里時(shí),私以為其實(shí)并沒(méi)有很大的區(qū)別,舉一個(gè)例子說(shuō)明,一行人前往租車(chē),五個(gè)人只需要取出一輛車(chē)即可,五次獲取一輛車(chē)的請(qǐng)求實(shí)際上都是同一輛車(chē),即可視為五人分享了這一輛車(chē),如果采取對(duì)象池的話(huà),五人應(yīng)該取得五輛車(chē)。這里存在一點(diǎn)疑惑,有待日后更加深入的學(xué)習(xí)后來(lái)更改。

C#實(shí)現(xiàn)簡(jiǎn)單享元模式和對(duì)象池

對(duì)象池

享元模式通常由三部分組成,抽象享元角色,具體享元角色,享元工廠(chǎng)。


原型模式

原型模式用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)復(fù)制這些原型創(chuàng)建新的對(duì)象。原型模式與享元模式的區(qū)別是原型模式側(cè)重于”創(chuàng)建“,我們通過(guò)拷貝確確實(shí)實(shí)的創(chuàng)建了新的實(shí)例,它屬于創(chuàng)建型設(shè)計(jì)模式;而享元模式側(cè)重于“重用”,即如果有現(xiàn)有的實(shí)例就不去創(chuàng)建了,直接拿來(lái)用就行了。

??原型模式也可以簡(jiǎn)單理解為:深拷貝和淺拷貝。

? ? 淺拷貝:將對(duì)象中所有得字段復(fù)制到新得對(duì)象(副本)中,其中,值類(lèi)型的字段的值被復(fù)制到副本中后,在副本中修改不會(huì)影響到源對(duì)象的值,而引用類(lèi)型的字段被復(fù)制到副本中的是引用類(lèi)型的引用,而不是引用的對(duì)象,在副本中對(duì)引用類(lèi)型的修改會(huì)影響源對(duì)象本身。對(duì)于淺拷貝(淺克隆)一般我們用Object.MemberwiseClone方法

? ? 深拷貝:同樣的是將所有字段復(fù)制到新的對(duì)象當(dāng)中,不過(guò),無(wú)論作為對(duì)象的值類(lèi)型,還是引用類(lèi)型,都會(huì)被重新創(chuàng)建和賦值,對(duì)于副本的修改,不會(huì)影響到對(duì)象的本身。深拷貝(深克?。┮话悴捎眯蛄谢姆绞竭M(jìn)行拷貝

? ? 在C#中,如果你要實(shí)現(xiàn)淺拷貝或者深拷貝,微軟都建議使用類(lèi)型繼承接口ICloneable接口的方式明確告訴調(diào)用者,該類(lèi)型可以被拷貝。

????什么樣的情況下才會(huì)需要應(yīng)用原型模式呢,假設(shè)我們需要制作一個(gè)史萊姆怪物,他的技能是分裂自己,并且完全復(fù)制分裂時(shí)的狀態(tài)。那么史萊姆工廠(chǎng)這時(shí)候就無(wú)法滿(mǎn)足產(chǎn)出這樣一個(gè)特殊的史萊姆,當(dāng)然我們也可以通過(guò)記錄分裂時(shí)的各項(xiàng)參數(shù)來(lái)生產(chǎn)相同的史萊姆,但是我們采用更簡(jiǎn)單的辦法,讓史萊姆作為原型,在分裂的時(shí)候克隆自己,這樣簡(jiǎn)單的實(shí)現(xiàn)這個(gè)效果。

代碼懶得寫(xiě)了,網(wǎng)上扒一個(gè)當(dāng)例子


游戲編程模式-享元模式,池類(lèi)技術(shù),原型模式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
奈曼旗| 莎车县| 闻喜县| 聂荣县| 贵阳市| 渝北区| 张北县| 华宁县| 抚顺县| 秦安县| 五大连池市| 石景山区| 漳平市| 云梦县| 容城县| 福州市| 兴宁市| 西昌市| 安龙县| 葫芦岛市| 墨竹工卡县| 麦盖提县| 东乌珠穆沁旗| 新丰县| 普宁市| 洪洞县| 冷水江市| 韶山市| 清新县| 澄江县| 辽阳市| 泰安市| 盐山县| 灵台县| 合阳县| 尚义县| 永春县| 临邑县| 溆浦县| 平顺县| 临沭县|