【问题标题】:Who should create objects谁应该创建对象
【发布时间】:2020-11-27 09:55:29
【问题描述】:

我有一个班级 Game,现在我需要将玩家 (IPlayer) 添加到游戏中。我正在考虑两种情况:

  1. 第一种方法
IPlayer AddPlayer()

在这种情况下,调用者不必担心IPlayer 的实现。他得到的只是一个接口,不能篡改对象。 Game 知道实现细节,可以管理玩家的状态,例如加点:

interface IPlayer
{
    int Points { get; }
}

class Player : IPlayer
{
   ...
   void AddPoints(int points);
}
  1. 第二种方法
void AddPlayer(IPlayer player)

在这种方法中,调用者负责交付满足接口的对象。从而了解详情。

我想知道:这些方法中的任何一个明显更好/更差吗?

只是对我的观点发表评论:

我的目标是拥有清晰的 API。而且我认为第一种方法更好。当我给用户我的图书馆时,我只给他界面。所有细节都保留在里面。 (类似地,我可以访问IGame,在后台是Game 的一个实例)

【问题讨论】:

    标签: api architecture


    【解决方案1】:

    我强烈建议像 Unity 那样使用“组合”方法。不要创建围绕特定游戏实体建模的类/接口。改为使用GameObject 类,公开Components 的集合。

    每个组件都会为拥有的游戏对象添加一些特性和行为,例如位置、物理、统计等。

    一个GameObject 实例可以充当某种“游戏控制器”,生成实体并跟踪分数(或您的游戏具有的任何规则)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多