使用composition(java)时如何实现关闭开关?

时间:2012-08-11 14:01:21

标签: java design-patterns composition

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

PlayerStrategy 的一些实现很简单,但是其他一些实现资源非常密集,我需要确保在策略停止使用时正确释放资源。这些策略还有一个额外的方法:turnOff()负责处理。

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

问题是只有少数策略需要turnOff(),因此我不习惯将该方法添加到 PlayerStrategy 界面。
现在,当播放器停止播放时,如果方法turnOff()存在于其策略中,则通过反射进行检查。但它笨重而丑陋。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

  1. 避免反思:反思是一个坏主意。无论你在哪里(似乎你都可以),避免它。

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

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

答案 1 :(得分:1)

如果您不想更改PlayerStrategy的实现,可以使用facade pattern来处理turnOff。