圈 Circle--ESBasic 可复用的.NET类库(03)

简介: 1.缘起:     假设我们要开发一个多人跳棋游戏。在跳棋游戏中,当一个人走一步棋之后,控制权就轮到下一家,如此轮询,一圈之后控制权又回到自己,然后再继续轮圈下去。我们可以使用数组或列表等数据结构来解决这种转圈圈的问题,但是始终都不够直观。

  1.缘起:

    假设我们要开发一个多人跳棋游戏。在跳棋游戏中,当一个人走一步棋之后,控制权就轮到下一家,如此轮询,一圈之后控制权又回到自己,然后再继续轮圈下去。我们可以使用数组或列表等数据结构来解决这种转圈圈的问题,但是始终都不够直观。

    我设计了Circle来对“圈”这种数据结构进行抽象,我们在类似跳棋这样的游戏中可以非常方便地直接使用它。

Circle的形象示意图如下:
    
 

2.适用场合:

       需要类似“圈”这样的数据结构支持的场合。
 

3.设计思想与实现

    Circle也是一个非常简单的数据结构,其类图如下所示:

 

 
    从类图中显示的
HeaderTail属性,我们看出Circle就像一个真正的现实中焊接而成的铁圈一样,是有结合点的,这个结合点就是TailHeader交接的地方。

Append方法用于将一个新的对象附加到Tail后面,于是这个新的对象就变成了真正的Tail

Insert方法用于在指定的地方插入一个新对象,如果当前Circle中没有任何对象,则无论其指定的位置是哪里,都将被放置在Header的位置。

SetCurrent方法用于将控制权转交给参数指定的对象。如果指定的对象在Circle中不存在,则SetCurrent将不执行任何操作。

MoveNext方法和MoveBack方法表示将控制权转移到下一家或上一家。

PeekNext方法和PeekBack方法与MoveNextMoveBack含义不一样的地方在于:MoveNextMoveBack转移了控制权,而PeekNextPeekBack没有,它们只是返回下一家或上一家对象。

关于Circle的实现要注意以下几点:

(1)Circle的内部是使用List来存放对象的。

(2)Circle没有进行任何加锁控制,所以它不是线程安全的。我们类似跳棋这样转圈圈的游戏,通常都是以一个有序的顺序来控制游戏的进行的,很少出现多个线程同时修改一个Circle的控制权的情况,所以在类似这样的环境中,Circle就不需要加锁了。

(3)注意,InsertAt方法和RemoveAt方法接收的参数postionIndex的值允许比内部List的最大索引值还大,它们在实现时会对postionIndex进行求模运算,将postionIndex修正到正确的范围内,在对List进行InsertRemove操作。
 

4. 使用时的注意事项

(1)Insert方法并不会改变Circle的当前对象(即Current属性的值)。

(2)Circle中不包含任何元素时,HeaderTailCurrent属性返回的都是default(T)。如果T是引用类型,则这个值是null

(3)Circle中只包含一个元素时,HeaderTail属性将返回同一个对象。

 

5.扩展

Circle暂时没有任何扩展。

在我们后面介绍的CircleTaskSwitcher(循环任务切换器),它的实现就用到了本节的Circle


    注: ESBasic已经开源,点击这里下载源码。

 

目录
相关文章
|
12月前
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
1月前
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
|
1月前
|
XML 开发框架 数据格式
.Net Core 开发框架,支持多版本的类库
.Net Core 开发框架,支持多版本的类库
31 0
|
2月前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
36 3
|
2月前
|
人工智能 前端开发 Devops
NET技术在现代开发中的影响力日益增强,本文聚焦其核心价值,如多语言支持、强大的Visual Studio工具、丰富的类库和跨平台能力。
【7月更文挑战第4天】**.NET技术在现代开发中的影响力日益增强,本文聚焦其核心价值,如多语言支持、强大的Visual Studio工具、丰富的类库和跨平台能力。实际应用涵盖企业系统、Web、移动和游戏开发,以及云服务。面对性能挑战、容器化、AI集成及跨平台竞争,.NET持续创新,开发者应关注技术趋势,提升技能,并参与社区,共同推进技术发展。**
28 1
|
2月前
|
开发框架 .NET API
.NET Core 和 .NET 标准类库项目类型有什么区别?
在 Visual Studio 中,可创建三种类库:.NET Framework、.NET Standard 和 .NET Core。.NET Standard 是规范,确保跨.NET实现的API一致性,适用于代码共享。.NET Framework 用于特定技术,如旧版支持。.NET Core 库允许访问更多API但限制兼容性。选择取决于兼容性和所需API:需要广泛兼容性时用.NET Standard,需要更多API时用.NET Core。.NET Standard 替代了 PCL,促进多平台共享代码。
|
4月前
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
|
9月前
|
存储 文字识别 C#
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
235 0
|
存储 安全 API
10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)
10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)
|
XML .NET C#
.NET Framework 类库——C#命名空间大全
引用地址:https://msdn.microsoft.com/zh-cn/library/gg145045.aspx C# using引用时,不知道有哪些命名空间,这下转载收集一篇,方面查找使用。
1162 0