亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

ESBasic 可復(fù)用的.NET類庫(03) -- 圈 Circl

系統(tǒng) 1774 0
1. 緣起:

假設(shè)我們要開發(fā)一個多人跳棋游戲。在跳棋游戲中,當(dāng)一個人走一步棋之后,控制權(quán)就輪到下一家,如此輪詢,一圈之后控制權(quán)又回到自己,然后再繼續(xù)輪圈下去。我們可以使用數(shù)組或列表等數(shù)據(jù)結(jié)構(gòu)來解決這種轉(zhuǎn)圈圈的問題,但是始終都不夠直觀。

我設(shè)計了 Circle 來對“圈”這種數(shù)據(jù)結(jié)構(gòu)進行抽象,我們在類似跳棋這樣的游戲中可以非常方便地直接使用它。

Circle 的形象示意圖如下:

ESBasic 可復(fù)用的.NET類庫(03) -- 圈 Circle

2. 適用場合:

需要類似“圈”這樣的數(shù)據(jù)結(jié)構(gòu)支持的場合。

3 .設(shè)計思想與實現(xiàn)

Circle 也是一個非常簡單的數(shù)據(jù)結(jié)構(gòu),其類圖如下所示:

ESBasic 可復(fù)用的.NET類庫(03) -- 圈 Circle
從類圖中顯示的
Header Tail 屬性,我們看出 Circle 就像一個真正的現(xiàn)實中焊接而成的鐵圈一樣,是有結(jié)合點的,這個結(jié)合點就是 Tail Header 交接的地方。

Append 方法用于將一個新的對象附加到 Tail 后面,于是這個新的對象就變成了真正的 Tail

Insert 方法用于在指定的地方插入一個新對象,如果當(dāng)前 Circle 中沒有任何對象,則無論其指定的位置是哪里,都將被放置在 Header 的位置。

SetCurrent 方法用于將控制權(quán)轉(zhuǎn)交給參數(shù)指定的對象。如果指定的對象在 Circle 中不存在,則 SetCurrent 將不執(zhí)行任何操作。

MoveNext 方法和 MoveBack 方法表示將控制權(quán)轉(zhuǎn)移到下一家或上一家。

PeekNext 方法和 PeekBack 方法與 MoveNext MoveBack 含義不一樣的地方在于: MoveNext MoveBack 轉(zhuǎn)移了控制權(quán),而 PeekNext PeekBack 沒有,它們只是返回下一家或上一家對象。

關(guān)于 Circle 的實現(xiàn)要注意以下幾點:

(1) Circle 的內(nèi)部是使用 List 來存放對象的。

(2) Circle 沒有進行任何加鎖控制,所以它不是線程安全的。我們類似跳棋這樣轉(zhuǎn)圈圈的游戲,通常都是以一個有序的順序來控制游戲的進行的,很少出現(xiàn)多個線程同時修改一個 Circle 的控制權(quán)的情況,所以在類似這樣的環(huán)境中, Circle 就不需要加鎖了。

(3) 注意, InsertAt 方法和 RemoveAt 方法接收的參數(shù) postionIndex 的值允許比內(nèi)部 List 的最大索引值還大,它們在實現(xiàn)時會對 postionIndex 進行求模運算,將 postionIndex 修正到正確的范圍內(nèi),在對 List 進行 Insert Remove 操作。

4. 使用時的注意事項

(1) Insert 方法并不會改變 Circle 的當(dāng)前對象(即 Current 屬性的值)。

(2) 當(dāng) Circle 中不包含任何元素時, Header Tail Current 屬性返回的都是 default(T) 。如果 T 是引用類型,則這個值是 null

(3) 當(dāng) Circle 中只包含一個元素時, Header Tail 屬性將返回同一個對象。

5. 擴展

Circle 暫時沒有任何擴展。

在我們后面介紹的 CircleTaskSwitcher (循環(huán)任務(wù)切換器),它的實現(xiàn)就用到了本節(jié)的 Circle


注:ESBasic源碼可到 http://esbasic.codeplex.com/ 下載。

ESBasic 可復(fù)用的.NET類庫(03) -- 圈 Circle


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本韩国欧美一区 | 欧美一级精品 | 999福利视频 | 亚洲第一永久色 | 一区二区三区欧美日韩 | 奇米成人影视 | 色播99| 成人午夜在线观看国产 | 中文字幕91在线 | 亚洲午夜综合网 | 奇米影视四色狠狠888俺去啦 | 国产在热线精品视频国产一二 | 91激情视频 | 日本一区二区三区中文字幕 | 97视频免费上传播放 | 中文字幕在线观看2023 | 亚洲国产99在线精品一区69堂 | 视频大全在线观看免费 | 国产大片免费观看中文字幕 | 伊人久久亚洲综合天堂 | 中文字幕在线一区二区在线 | 日本高清中文字幕视频在线 | 一个色综合网 | 午夜免费福利社 | 久草在线手机 | 性欧美video视频另类 | 成人国产精品 | 一级特黄一欧美俄罗斯毛片 | 国产综合亚洲专区在线 | 在线观看深夜观看网站免费 | 久久综合九色综合亚洲小说 | 久操久操久操 | 四虎4hu | 你懂的91 | 99视频精品全部免费免费观 | 911精品国产91久久久久 | 久久麻豆视频 | 天天射天天舔 | 婷婷五 在线播放 | 成人美女免费网站视频 | 日日摸夜夜爽日日放碰 |