|
|
1
1
一个有趣的潜在选择是使用 Visitor Pattern . 朱迪丝·毕晓普和R·奈杰尔·霍斯波写了一篇关于 design pattern efficiency 其中,他们使用C 3功能解释了传统访客模式的各种变体。 特别是,我将了解他们如何与代表一起处理访客模式。使用一个委托列表或一堆委托可能会给您提供一种有趣的方法来处理来自多个对象的多个效果,并且更容易扩展类层次结构的任一侧(添加船舶或添加效果),而不会发生巨大的中断代码更改。 |
|
|
2
0
不完全是个答案,但对我来说,这简直就是“属性模式”。有一个著名的耶格咆哮关于这,我想它会给你一些体面的指针。 http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html |
|
|
3
0
这看起来像经典的OOP多态性/访问者困境。但是,您的要求使它更容易。
基本上,我会创建一个基类
具有空的默认主体。当你添加一个新的现象时,你只需要添加一个空体的新方法。(方法可能有参数,如黑洞的坐标或重量等。) 对于效果和它们的相互作用-我认为你应该添加更多关于你想要它的信息,例如,这些相互作用是罕见的还是常见的,它们是以某种方式累积的,它们是否局限于它们控制的一组有限的变量… |
|
|
4
0
听起来很经典 multiple dispatch problem 对我来说。 |
|
|
5
0
有趣的问题 在某种程度上,一艘船必须知道什么现象会影响它,什么现象会影响它在哪艘船上。 这可以存储在运行时分析的XML文件中。 也许你可以用 Decorator pattern 计算效果。在运行时产生各种现象。 假设您的船实现了一个接口iship,并且代码中的任何地方都使用iship。 现在,假设您的所有现象也实现了接口iship(decorator设计模式所需)。
在这种现象中,您将方法从原始船包装起来,这样您就可以对属性和所有属性进行修改。 另外,如果您使用 strategy pattern 你可以产生任何你想要的现象。 除去一个现象,可以用你走过的那堆装饰过的船,并重新拍打它,所以我看不出有什么问题。 至于协同效应,我想我会使用一个稍微修改过的现象,它只有在目标船自身有所有的现象时才起作用。 |
|
|
6
0
我认为这是你的问题的关键,如果每一个船舶现象的相互作用都是独一无二的,那就是真的。在您创建的表中,情况似乎是这样的,因此对于n个船和m个现象,您需要指定n*m交互。你闻到维修问题的味道是对的。 唯一的出路是通过使现象的影响取决于船舶的特性,使船舶现象之间的相互作用不那么独特。例如,我们可以说只有用奇怪的氧化铝建造的船才能在黑洞中生存。 但是只有一处房产并不能为你买任何东西,你可以很容易地指定哪些船会受到黑洞的影响。关键是多个性质表现出相同的组合爆炸。 因此,用奇怪的氧化铝建造的船只可以在黑洞中生存,而不用氧化铝建造的船只可以走得更快。1属性允许您指定2件事(1位=2种可能性)。用Corbite引擎建造的船在弯曲区会走得更快。同时拥有Corbite引擎和奇怪氧化铝的飞船将在星云领域获得50%的护盾,等等。 将属性添加到船舶可以避免指定每个现象如何与每艘船舶交互,但仍然有每个现象,并且每艘船舶都显示出适当的行为。 如果有m条船,那么您只需要log2(m)属性就可以为每个船提供一个独特的行为。 |
|
|
7
0
我认为问题的答案取决于问题问得有多好。 我认为设计的方法取决于问题是什么(或者问题将来会发生)。 给出一个表,然后我认为解决方案是维护一个表并查询它。 这里是python代码:(没有测试,只是举个例子)
如果过程方法发生更改,只需在现象类中修改过程方法。 如果你认为船需要知道如何处理现象,那么就把处理方法改为船类。 或者你认为还有其他的事情,不仅是需要改变船的状态的现象(像其他的船,浅滩岩石)。 您需要在Ship类中维护一个流程表,并使现象成为其中之一, 再说一遍,如何设计取决于问题本身。 |