我正在为Guild Wars 2编写一个boss计时器。我有一个Boss
类,其中包含所有相关的游戏事件和一个update()
方法,用于从API中获取当前事件状态。
为了降低我想要并行化请求的所有老板的更新时间。
现在,我可以在Runnable
课程中轻松实现Boss
界面,并使用update()
方法调用run()
方法。
之后我会迭代所有老板,将它们传递给Executor
的{{1}}方法并等到所有老板都更新。
为一个类实现execute()
接口是否有什么问题,这个类更像是一个包含信息的类,而不是关于编码风格的工作者?
另外,我还可以构建一个可运行的sperate更新程序,并执行Runnable
对象的update()
方法,而不是将其包含在Boss
类本身中。
答案 0 :(得分:0)
为一个类实现Runnable接口是否有什么问题,这个类更像是一个包含信息的类,而不是关于编码风格的工作者?
听起来你正试图拥有一组包含数据的类和另一组具有行为的类。这是一个糟糕的设计。面向对象编程是指将数据和行为组合成一种事物(对象)。
当涉及一个类是否应该实现Runnable
接口(或任何其他接口)时,最重要的是遵守该接口的契约。这由the JavaDoc for Runnable
描述:
Runnable接口应由任何其实例由线程执行的类实现... 此接口旨在为希望在活动时执行代码的对象提供通用协议...处于活动状态只表示线程已启动且尚未停止。
您提到使用Executor
,因此您确实希望这些实例由线程执行,因此Runnable
是合适的。