提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-10-21 10:15:14.000|阅读 376 次
概述:假设我们要开发一个多人跳棋游戏。在跳棋游戏中,当一个人走一步棋之后,控制权就轮到下一家,如此轮询,一圈之后控制权又回到自己,然后再继续轮圈下去。我们可以使用数组或列表等数据结构来解决这种转圈圈的问题,但是始终都不够直观。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
1.缘起:
假设我们要开发一个多人跳棋游戏。在跳棋游戏中,当一个人走一步棋之后,控制权就轮到下一家,如此轮询,一圈之后控制权又回到自己,然后再继续轮圈下去。我们可以使用数组或列表等数据结构来解决这种转圈圈的问题,但是始终都不够直观。
我设计了Circle来对“圈”这种数据结构进行抽象,我们在类似跳棋这样的游戏中可以非常方便地直接使用它。
Circle的形象示意图如下:
2.适用场合:
需要类似“圈”这样的数据结构支持的场合。
3.设计思想与实现
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。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢