3

我在 java 中有一个非常简单的Player类,它使用一些策略对象,这些对象都继承自接口PlayerStrategy

PlayerStrategy的一些实现很简单,但其他一些实现非常耗费资源,我需要确保在策略停止使用时正确释放资源。这些策略有一个额外的方法:turnOff() 可以解决这个问题。

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

问题是只有少数策略需要 turnOff() ,所以我觉得将该方法添加到PlayerStrategy接口并不方便。
现在,当 Player 停止播放时,它会通过反射检查其策略中是否存在方法 turnOff()。但它又笨又丑。有没有更好的办法?

4

2 回答 2

2
  1. 避免反思:反思是个坏主意。只要你能(而且看起来你可以),尽量避免。

  2. 有接口很好turnOff()如果你必须使用接口......相信我添加turnOff()cleanup()方法是个好主意;即使大多数子类只有空的大括号。如果它们将来更新以使用需要清理的某些资源,您将不需要做额外的工作。

  3. 你可以得到你想要的,但成本更高:如果你真的很死板并且确定子类不会扩展任何其他类。您可以使用空方法创建PlayerStrategy一个抽象类。turnOff()这将解决您的问题,但会限制子类扩展其他类的能力。

于 2012-08-11T14:07:35.247 回答
1

如果您不想更改 PlayerStrategy 的实现,可以使用外观模式来处理关闭。

于 2012-08-11T14:51:38.080 回答