考虑用我最喜欢的例子(国际象棋)进行简单的聚合:我会创建像 2D 棋子数组一样的棋盘(至少在我看来这是一个很好的解决方案),例如:
chessman [,] board=new chessman[8,8];
这意味着在每个位置上都可以有一个棋子。但实际上,最多只有32个棋子。这就是问题所在——类图应该显示、实现还是我的假设?
棋盘<>----棋子 0..64 还是 0..32?
因为实现肯定允许 64,而游戏逻辑不应该允许超过 32。
考虑用我最喜欢的例子(国际象棋)进行简单的聚合:我会创建像 2D 棋子数组一样的棋盘(至少在我看来这是一个很好的解决方案),例如:
chessman [,] board=new chessman[8,8];
这意味着在每个位置上都可以有一个棋子。但实际上,最多只有32个棋子。这就是问题所在——类图应该显示、实现还是我的假设?
棋盘<>----棋子 0..64 还是 0..32?
因为实现肯定允许 64,而游戏逻辑不应该允许超过 32。
不,它应该 as 0...64
,因为有 64 ChessMan
,其中只有 32 的数组不为空。
在类图中,我们不会省略(减少)为空的引用。
再一次,确实只有 32 个不为空的对象,但这不是类图的东西,你需要在游戏中整个 64 个块,这就是类图描述的。
但除此之外,我真的看不出你的方法设计得很好,因为总是有 +50% 的board
数组是空的。所以我的建议只是保持(跟踪)ChessMan
s,并自己找到每个ChessMan
位置。您可能还需要删除丢失ChessMan
的 s。
正如您在上面的示例中所看到的,这可能是因为丢失了每个ChessMan
, 导致在数组中设置一个空值,但在类图中,我们总是设置关联的实际大小。
您和我的解决方案有很大的不同,您的解决方案针对最佳流程执行进行了优化(针对速度进行了优化),以防每一步您只需从单词中读取相关块board
并处理单词。
但是我的针对最佳内存管理进行了优化(针对内存使用进行了优化),在此解决方案中,您只需检查整个数组即可找出谁属于相关块。
另一个解决方案是继续跟踪位置