我在java中有一个非常简单的 Player 类,它使用一些策略对象,所有这些都继承自 PlayerStrategy 接口。
PlayerStrategy 的一些实现很简单,但是其他一些实现资源非常密集,我需要确保在策略停止使用时正确释放资源。这些策略还有一个额外的方法:turnOff()负责处理。
现在如果玩家离开游戏,我希望它在所有需要它的策略中调用turnOff()。
问题是只有少数策略需要turnOff(),因此我不习惯将该方法添加到 PlayerStrategy 界面。
现在,当播放器停止播放时,如果方法turnOff()存在于其策略中,则通过反射进行检查。但它笨重而丑陋。还有更好的方法吗?
答案 0 :(得分:2)
避免反思:反思是一个坏主意。无论你在哪里(似乎你都可以),避免它。
在界面中turnOff()
很好:如果您必须使用界面...相信我添加了turnOff()
或cleanup()
方法是个好主意;即使大多数子类只有空的花括号。如果将来更新以使用需要清理的资源,您将不需要做额外的工作。
你可以得到你想要的但成本更高:如果你真的很僵硬并且确定子类不会扩展任何其他类。您可以将PlayerStrategy
作为空方法的turnOff()
抽象类。这将解决您的问题,但会限制子类扩展其他类的能力。
答案 1 :(得分:1)
如果您不想更改PlayerStrategy的实现,可以使用facade pattern来处理turnOff。