如何将多组实现中的一组附加到对象?

时间:2016-08-12 23:16:31

标签: oop inheritance interface abstract-class composition

假设我正在为一组代理建模。这些代理可能由播放器或机器人控制。此外,每个代理都有一个角色 - 例如Explorer或Engineer。所有角色都共享相同的共同操作,但每个角色可能会以不同的方式实现操作。理想情况下,您可以调用agentInstance.move(),并根据它们的角色来执行操作。

我一直在努力解决如何对此进行建模的问题,并专门查看了StrategyTemplate模式 - 但我不确定他们是不是我需要什么。

一个想法是制作抽象Agent的Player和Bot子类,并制作抽象角色的Explorer和Engineer子类。然后每个代理都有一个角色。但是,这似乎意味着我必须像这样传递我的命令:agentInstance.getRole().move(),或创建像agentInstance.move(){ this.role.move(); }这样的辅助函数 - 这似乎有点不优雅。

Example Model - Note that Agent and Role would have to share methods by coincidence.

我也意识到我的设计可能有点缺乏接口,所以我考虑将角色建模为接口和子接口,然后使用默认的实现,然后由Agent继承,但感觉就像一个解决方案对于一个问题。

那么 - 最好的建模方法是什么?哪些考虑因素对决策至关重要,尤其是Java 8接口和抽象类的相似之处?

1 个答案:

答案 0 :(得分:1)

我会这样做:

  • 我将使角色成为界面,因为它没有属性。探险家和 工程师将是班级而不是界面b'因为战略是如何 作品。
  • Player和Bot将与Agent关联,以便他们可以发布 命令代理。

对我来说,在进行OOP分析和设计时有两个至关重要的考虑因素:

  • 它能解决我的问题吗?如果它确实那么不修复它!未来的问题 是为了将来。
  • 必须尽可能轻松地进行重构。作为新要求 进来你将不得不做很多重构。

enter image description here