黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統 1931 0
1. 緣起:

假設我們要開發一個多人跳棋游戲。在跳棋游戲中,當一個人走一步棋之后,控制權就輪到下一家,如此輪詢,一圈之后控制權又回到自己,然后再繼續輪圈下去。我們可以使用數組或列表等數據結構來解決這種轉圈圈的問題,但是始終都不夠直觀。

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

Circle 的形象示意圖如下:

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

2. 適用場合:

需要類似“圈”這樣的數據結構支持的場合。

3 .設計思想與實現

Circle 也是一個非常簡單的數據結構,其類圖如下所示:

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

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

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

SetCurrent 方法用于將控制權轉交給參數指定的對象。如果指定的對象在 Circle 中不存在,則 SetCurrent 將不執行任何操作。

MoveNext 方法和 MoveBack 方法表示將控制權轉移到下一家或上一家。

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

關于 Circle 的實現要注意以下幾點:

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

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

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

4. 使用時的注意事項

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

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

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

5. 擴展

Circle 暫時沒有任何擴展。

在我們后面介紹的 CircleTaskSwitcher (循環任務切換器),它的實現就用到了本節的 Circle


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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論