gpt4 book ai didi

language-agnostic - OO 设计,开放/封闭原则问题

转载 作者:行者123 更新时间:2023-12-04 10:33:23 26 4
gpt4 key购买 nike

我一直在思考这个面向对象的设计问题,但无法提出令人满意的解决方案,所以我想在这里向人群开放以征求意见。

我有一个代表回合制棋盘游戏的 Game 类,出于这个问题的目的,我们可以假设它类似于 Monopoly。
在我的设计中,我有一个包含方法 TakeTurn 的 Player 类。

Game 循环遍历所有玩家并调用 TakeTurn 方法来完成所有必要的事情以完成转弯。
我希望能够拥有 n 个玩家,并且能够将任意数量的玩家设置为电脑玩家。
所以,我的想法是有一个 HumanPlayer 类和一个 ComputerPlayer 类,它们都派生自 Player。

Game 只知道 Player 类,并简单地依次调用每个 Player 的 TakeTurn 方法。
我的问题在于 ComputerPlayer 对象可以完全自动化,即与 Monopoly 示例保持一致,可以使用某种逻辑决定购买房产。
现在,使用 HumanPlayer 对象,它需要从实际用户那里获得输入才能购买房产,这似乎暗示了不同的界面,并且可能意味着它们不应该派生

如果不让 Game 类明确地知道各种 Player 类的实际实现,我就无法为这个问题提出一个好的解决方案。
我总是可以在 Game 类中假设永远只有人类和计算机玩家并有效地关闭它以进行扩展,但这似乎不是好的 OO 编程。

对此的任何意见将不胜感激。

最佳答案

我认为你不应该让 Game 类处理 IO。
这样,(阻塞的)TakeTurn 方法将从游戏板中隐藏执行方式。它可以使用其他对象与用户进行通信。

所有 Game 类都应该关注的是棋盘和转牌的状态。玩家应该都实现一个单一的 Player 接口(interface),并从游戏中隐藏所有实现。

关于language-agnostic - OO 设计,开放/封闭原则问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/91137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com