api - 谁应该创建对象
问题描述
我有一堂课Game
,现在我需要将玩家 ( IPlayer
) 添加到游戏中。我正在考虑两种情况:
- 第一种方法
IPlayer AddPlayer()
在这种情况下,调用者不必担心IPlayer
. 他得到的只是一个接口,不能篡改对象。知道实现细节并可以管理玩家的Game
状态,例如添加点:
interface IPlayer
{
int Points { get; }
}
class Player : IPlayer
{
...
void AddPoints(int points);
}
- 第二种方法
void AddPlayer(IPlayer player)
在这种方法中,调用者负责交付满足接口的对象。从而了解详情。
我想知道:这些方法中的任何一个显然更好/更差吗?
简单评论一下我的观点:
我的目标是拥有清晰的 API。而且我认为第一种方法更好。当我给用户我的库时,我只给他界面。所有细节都保留在里面。(同样,我可以访问IGame
引擎盖下的一个实例Game
)
解决方案
我强烈建议像 Unity 那样使用“组合”方法。不要创建围绕特定游戏实体建模的类/接口。改为有一个GameObject
类,公开一个 s 的集合Component
。
每个组件都会为拥有的游戏对象添加一些特性和行为,如位置、物理、统计等。
一个GameObject
实例可以充当某种“游戏控制器”,生成实体并跟踪分数(或您的游戏具有的任何规则)。
推荐阅读
- java - Websphere 超时异常
- php - 用购物车总数和订阅期替换 WooCommerce“下订单”按钮文本
- docker - docker run 和 docker-compose 结果不同?
- html - 为什么我不能根据 CSS 中的文本调整图像大小?
- c# - 如何生成不连续重复 3 次的随机 int?
- r - 按组划分的因子水平
- activex - 是否有对 Webview2 控件的 ActiveX 支持
- android - Android Autofill 执行回调
- javascript - 为什么 setTimeout 函数是非阻塞的?
- javascript - 复制对象属性保持可变性