object - 最佳生态系统模拟类层次结构?
问题描述
一些背景:
类似的问题以前被问过很多次,主要是因为这通常表现为一些关于多态性的 OOP 入门式的问题。通常,诸如“Dog / Cat 类都派生自 Animal 但实现了它们自己的 speak() 方法”之类的长句或类似的非常简单的东西。
不幸的是,对于那些真正希望围绕基于动物/植物的生态系统进行一些复杂项目的人来说,这些简单的答案实际上使得很难找到关于围绕整个生态系统的完整类层次结构的讨论。
在某种程度上,所有类层次结构设计都将特定于项目的详细程度。例如,我对足够的细节不感兴趣,无法为我的植物类制作光合作用()函数,并从太阳 - > 植物中模拟出那种基本的能量关系。但我希望这个类层次结构样板具有足够的包容性,以便如果项目想要实现这样的事情不会太难。
因此,我希望我们能够就生态系统的最佳类层次结构达成共识,该生态系统将足够通用,以最大程度地减少未来重构/扩展的痛苦。
生态系统模拟:
通过“生态系统”模拟,我们以此为例。有吃植物的兔子,有吃兔子的狐狸。每个班级都有特定的行为。繁殖(考虑基因)很重要。所有 LivingEntity 都可以“消费”,并且所有 LivingEntity 都有一些会随着时间而变化的基因。
这里只是一些初步的想法:
LivingEntity(抽象)
动物 : LivingEntity(抽象)
植物:LivingEntity(抽象)
灌木:植物
树 : 植物
兔子:动物
狐狸:动物
可能想要一些更可扩展的东西。还需要考虑接口。这里只是一些我不确定如何处理 currenty 的想法:
物种?
部落?(红兔与蓝兔)
栖息地?(洞穴,窝点)
生命值(即兔子可以“幸免”狐狸的攻击)?
仅使用兔子和狐狸的具体例子,但理想情况下应该可以扩展到食物链任何级别的所有类型的生物。
另一个问题是这种传统的类层次结构对于足够复杂的生态系统来说是不可扩展的。生物学充满了边缘情况行为,但向这些类添加行为似乎会变得非常麻烦。这让我相信我需要某种根本不同的设计模式。
总之:
在我的“大项目”中,我忽略了在开始之前优化多态性,这导致了许多重构和糟糕的 OOP 体验。在我变得太深之前尝试优化它。非常感谢你的帮助!
解决方案
可能是一个答案,但在得出这个结论之前,我需要了解一些细节:
本文使用 EventHandler 模式来尝试和缓解添加新行为时遇到的一些问题。
我不完全确定这是理想的解决方案,但它看起来很有希望。我缺乏完整的例子,所以我仍然理解这样的事情会是什么样子。
这种方法似乎有一个明显的缺点:
目前 FOREST 设计的局限性在于它没有为生物体之间的相互作用建模提供任何支持
如果我正确理解这一点,兔子就不可能消耗()植物。想知道是否有人对这种 EventHandler 模式有一些经验,以了解是否可以解决此问题。
推荐阅读
- google-cloud-platform - Terraform:使用共享 VPC 创建 GCP 项目
- python - 通过椭圆的线性回归显示出意外的行为
- python - 通过使用 python 比较两个 CSV 文件来用 NULL 值替换空格
- java - 使用 Java iText 在圆圈内插入多个段落和图像
- mongodb - 给定ID,找到dueAt小于ID.dueAt的条目
- quill - 确定 delta 是否由撤消生成
- javascript - HTML/CSS/PHP/JavaScript | 下拉内容未出现在所选下拉按钮附近
- javascript - Javascript - 使用随机用户登录
- c# - 使用 linq 聚合文本文件内容,以便将它们分组
- perl - perl 版本 5.24.1 中 perl 模块 `Getopt::Long::Subcommand` 的不正确行为