Closed. This question is
opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便
editing this post用事实和引用来回答。
5年前关闭。
最近,我一直在设计动物生命模拟器,最终遇到了一些设计问题。我会尽力总结一下,只指出必要的内容(我认为)。
问题
我正在努力使生物具有繁殖能力。但是,有些人可以性繁殖,也可以无性繁殖。
为了保持
open/close princible之后设计的动态性和灵活性,我决定使用
strategy pattern,最终出现以下情况:
尽管能够创建不同类型的生殖,每种类型都有其自己的算法,但有性生殖的类型需要一个参数,这将是另一个LivingBeing。
在研究互联网时,我发现可以修改策略模式以利用可扩展的参数类型。考虑到这一点,我决定为ReproduceBehavior上现有的重现方法创建一个参数。这是我得到的:
问题
我真正的怀疑是关于不同类型的复制参数的实现。
即使我为有性生殖建立了一个参数,对无性生殖也没有意义,对吗?由于什么原因,我给无性生殖提供了参数?如果您告诉我没关系,并且可以接受,只要我在方法的实现中不理会此参数,就可以了。
那么,我该如何实现有性生殖的参数呢?我是否应该在实现接口ReproductionParameter的地方创建一个名为SexualParameter的具体类?另外,如何使SexualReproduction识别其ReproductionParameter是SexualParameter?我应该使用instanceof吗?那是正确的(最佳实践)吗?
我真的很困惑。有人可以帮我吗?
编辑
由于我的同伴誓言要结束我的问题,因此我正在对其进行编辑,以便对其进行更严格的处理,并有待解决的特定标准。所以我们开始...
我们在谈论繁殖,对吗?而且我不能简单地在模拟器中模拟现实生活(就目前而言,我相信...),但是我可以接近这种情况(毫不夸张)。因此,我在这里公开并更好地定义了复制标准:
所有生物繁殖。
存在可以复制以下三种方式之一:性,无性和两种方式。
所有人都有性别。性别是雄性或雌性(同性恋动物无法繁殖,对不起)。
女性与男性交配,反之亦然。
在此期间,所有生物可以生育0、1或几个孩子
法案。
不同的生物具有繁殖标准。如果被接受,
复制成功完成。
一个生物只能与另一个相同类型的生物繁殖。
我将接受任何满足这些规则的设计。可以满足这些条件的第一个答案对我来说是正确的。无论您是否基于我们在这里所说的内容,都没有关系……正如我所说,只需要满足这些规则即可。
编辑2
坦率地说,有一组规则和标准可用于完成良好的设计。可以肯定的是,这里已经证明了一件事。代码重用是任何设计的关键。这可以通过不同的方式完成,其中之一是使用继承。当继承最终损害重用时,就是不应该使用它的事实。
对于我的其他程序员,也不要将项目设计视为基于观点的东西。项目设计是认真而具体的。没有人会根据自己的意见创建代码段。这使我想起了
Entity Relationship Model(ERM)。这是一门精确的科学,变化只是案例,而不是我们根据每个规则进行建模的方式。同样,类建模也不是基于意见的事情。主持人退伍军人是否只是在没有方向的情况下徘徊?有时我后悔不知道某些事情。
我认为“繁殖行为”在某种意义上说是不自然的,因为有些物种可能同时具有有性和无性繁殖行为(尽管据我了解,每个物种都至少需要一种繁殖方法)。
这就是我的建模方式
interface SexualReproduction<T extends LivingBeing>{
void reproduce(T partner);
}
interface AsexualReproduction{
void reproduce();
}
abstract class LivingBeing{
}
class Cat extends LivingBeing implements SexualReproduction<Cat>{
@Override
public void reproduce(Cat partner) {
}
}
class Bacteria extends LivingBeing implements AsexualReproduction{
@Override
public void reproduce() {
}
}
class Starfish extends LivingBeing implements AsexualReproduction,SexualReproduction<Starfish>{
@Override
public void reproduce(Starfish partner) {
}
@Override
public void reproduce() {
}
}