我在Java中有一个非常简单的Player类,它使用一些策略对象,这些对象全部从接口PlayerStrategy继承。

PlayerStrategy的某些实现很简单,而另一些实现则占用大量资源,因此我需要确保在停止使用该策略时正确释放资源。这些策略还有一个额外的方法:turnOff()来解决这个问题。

现在,如果Player离开游戏,我希望它在需要它的所有策略中都调用turnOff()。

问题在于,只有少数策略需要turnOff(),因此我不愿意将该方法添加到PlayerStrategy接口中。
现在,当播放器停止播放时,它将通过反射检查策略中是否存在方法turnOff()。但这又笨又丑。有没有更好的办法?

最佳答案

  • 避免反射Reflection :反射Reflection 是一个坏主意。尽可能(似乎可以)在任何地方都应避免。
  • 在界面中包含turnOff()是一件好事:如果您必须使用界面,请相信我添加turnOff()cleanup()方法是一个好主意。即使大多数子类的括号都为空。如果它们在将来进行更新以使用需要清理的某些资源,则无需进行额外的工作。
  • 您可以得到想要的东西,但代价更高:如果您确实很拘泥并且确保子类不会扩展任何其他类。您可以将PlayerStrategy设为抽象类,并将turnOff()作为空方法。这将解决您的问题,但将限制子类扩展其他类的能力。
  • 10-05 19:00