首页 > 解决方案 > 谁应该创建对象

问题描述

我有一堂课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

标签: apiarchitecture

解决方案


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

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

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


推荐阅读