Java 设计-外部处理的对象的状态
有一个与设计相关的问题: 我有一个抽象类播放器,它的子类有AIPlayer、HumanPlayer、NetworkPlayer等,还有类GameManager 当玩家移动时,会给玩家不同类型的牌,可以在以后的移动中使用 我应该在哪里存储玩家可用的卡 解决方案1: 使用getter和setter方法存储在抽象类Player中 问题,,子类可能会通过错误的编码意外地改变玩家拥有的牌。i、 问题是,setter方法对于玩家的子类是可用的,而实际上它应该只对GameManager可用——因为GameManager是唯一允许颁发卡的类 解决方案2: 创建不可修改的PlayerState类,并在GameManager中存储一个从玩家到PlayerState的私有地图。现在GameManager可以管理玩家的状态,就像他们拥有的卡一样,但是玩家的子类只能从GameManager中检索PlayerState对象,他们不能更改它Java 设计-外部处理的对象的状态,java,oop,Java,Oop,有一个与设计相关的问题: 我有一个抽象类播放器,它的子类有AIPlayer、HumanPlayer、NetworkPlayer等,还有类GameManager 当玩家移动时,会给玩家不同类型的牌,可以在以后的移动中使用 我应该在哪里存储玩家可用的卡 解决方案1: 使用getter和setter方法存储在抽象类Player中 问题,,子类可能会通过错误的编码意外地改变玩家拥有的牌。i、 问题是,setter方法对于玩家的子类是可用的,而实际上它应该只对GameManager可用——因为GameMa
问题,杀戮过度?我的意思是,玩家本身就是对象,但他们使用另一个对象来获取其状态。我认为这取决于您将游戏逻辑放在何处:
- 如果大部分逻辑非常通用,因此在GameManager中,那么在GameManager中管理每个玩家的卡也会更容易。实际上,您可以在GameManager中维护一个私有的
来存储每个玩家的卡,并通过将这些地图包装在一个不可修改的地图中,使这些卡对玩家及其实现可见,该地图类似于地图
Collections.unmodifiableMap()
- 如果大多数逻辑是高度特定于玩家的并且与其他玩家没有太多交互,那么最好将逻辑放在玩家或玩家实现中。在这种情况下,您可以直接在抽象玩家中维护一组可修改的
牌