假设我正在为一组代理建模。这些代理可能由播放器或机器人控制。此外,每个代理都有一个角色 - 例如Explorer或Engineer。所有角色都共享相同的共同操作,但每个角色可能会以不同的方式实现操作。理想情况下,您可以调用agentInstance.move(),并根据它们的角色来执行操作。
我一直在努力解决如何对此进行建模的问题,并专门查看了Strategy和Template模式 - 但我不确定他们是不是我需要什么。
一个想法是制作抽象Agent的Player和Bot子类,并制作抽象角色的Explorer和Engineer子类。然后每个代理都有一个角色。但是,这似乎意味着我必须像这样传递我的命令:agentInstance.getRole().move()
,或创建像agentInstance.move(){ this.role.move(); }
这样的辅助函数 - 这似乎有点不优雅。
我也意识到我的设计可能有点缺乏接口,所以我考虑将角色建模为接口和子接口,然后使用默认的实现,然后由Agent继承,但感觉就像一个解决方案对于一个问题。
那么 - 最好的建模方法是什么?哪些考虑因素对决策至关重要,尤其是Java 8接口和抽象类的相似之处?