选择正确的施法机制设计模式

时间:2015-05-04 22:52:10

标签: java design-patterns

我是OOD的新手,我真的不知道如何处理我想在游戏中实现的拼写机制。

  • 我想制作以下课程TeamActorSpell和界面SpellEffect
  • 演员可以对其他演员施放法术,但是可以的法术在对盟友和敌人施放时具有不同的行为(盟友是来自同一团队的演员)

我试过这种方式:

  • 我在SpellEffectDamagingStunning类中实施Healing,这些类会覆盖executeOn(Actor a)
  • Spell课程中我有两个SpellEffect列表 - 一个用于盟友,第二个用于敌人,所以在法术课中我需要知道的是被攻击的演员是施法者的盟友或敌人< / LI>
  • 我正在考虑使用策略模式进行拼写,所以我可以这样做:

    actor.setCastingStrategy( new TargetingAllyStrategy() )
    
  • 策略将是:

    execute a spell on the targeted actor using Spells's allyCast() method
    

但是我不确定将Actor对象传递给较低级别​​的对象。此外,如果不是每个演员都可以被击晕?我应该创建任何继承的类UnstunnableActor吗?或者也许使用instanceOf来检查已实现的接口。我在这个主题中很新,所以任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

由于你永远不会有第三类演员(只有盟友,敌人),我不认为这里需要策略模式。

我认为你可以让你的演员实现AllyActorInterfaceEnemyActorInterfaceSpell只会通过调用allyCastenemyCast来测试接口actor支持哪些并应用所选效果。

如果您应用效果的逻辑差异太大,您还可以考虑将拼写类拆分为EnemySpellAllySpell。你可以实现一个模板方法来选择哪个类法术适用于哪个actor。