假設我正在爲一組代理建模。這些代理可能受Player或Bot的控制。此外,每個代理都有一個角色 - 例如資源管理器或工程師。所有角色共享相同的常見操作,但每個角色可能會稍微有點不同。理想情況下,您將能夠調用agentInstance.move(),並根據他們具有的角色執行操作。如何將許多實現集中的一個連接到對象?
我一直在摔跤如何建模一段時間,並專門查看了Strategy和Template模式 - 但我不確定它們是我需要的。
一個想法是使抽象Agent的Player和Bot子類,並使抽象Role的Explorer和Engineer子類。然後每個代理都會有一個角色。但是,這似乎意味着我必須像這樣傳遞我的命令:agentInstance.getRole().move()
,或者創建像agentInstance.move(){ this.role.move(); }
這樣的幫助函數 - 這看起來有點不雅觀。
我也知道,我的設計能有點接口缺陷,所以我認爲建模角色的接口,並默認實現,然後由代理繼承子接口,但那種感覺就像尋找問題的解決方案一樣。
所以 - 建模這個最好的方法是什麼?哪些考慮對決策至關重要,特別是Java 8接口和抽象類的相似程度如何?
這是公平的 - 什麼是你就需要思考 「隧道」 通過agent.role.move命令()?這實際上不像我看起來那麼骯髒? –
這是可以接受的,因爲整點是使用多態性。但是,如果Player/Bot只需要調用agentInstance.move(),會更好。然後,將Move()行爲委託給代理的角色(例如,通過在Agent.Move()中調用Role.Move())。然後根據您給該代理的角色,它會以不同的方式移動。但這主要取決於你正在建模的業務。 –