我一直在想了一会儿这个面向对象的设计问题,现在都无法拿出一个满意的解决方案,所以想我应该把它开到人群这里一些意见。OO设计,开/常闭原则问题
我有一个游戏类代表一个回合制棋盘游戏,我们可以假设它类似于这个问题的垄断。 在我的设计,我有一个包含方法TakeTurn一个球员类。
的游戏遍历所有球员 S和调用TakeTurn方法做一切必要的事情来完成转弯。 我想能够拥有n个玩家,并且能够将他们的任意数量设置为电脑玩家。 所以,我的想法是有一个HumanPlayer类和一个类,这两个类都派生自Player。
的游戏只知道球员,并简单的呼吁依次在每个球员的TakeTurn方法。 我的问题在于事实上,物体可以完全自动化,即与Monopoly示例保持一致,可以决定使用某些逻辑来购买物业。 现在,随着HumanPlayer对象,它需要得到实际用户的输入,能够买实例中的属性,这似乎意味着不同的接口,可能意味着他们不应该得到
我一直没能拿出一个很好的解决问题,而不必在游戏类了解各种播放器的实际实现类中明确。我总是可以假设在游戏中,只有人类和电脑玩家才会这样做,并且有效地关闭它以延伸,但它看起来并不是很好的OO编程。
对此的任何意见将不胜感激。
我不确定[tag:open-closed-principle]在这里适用。 – Fuhrmanator 2012-04-18 12:51:43