【问题标题】:Factory pattern : Can "definition" be too large?工厂模式:“定义”会不会太大?
【发布时间】:2016-09-18 02:36:29
【问题描述】:

当传递给“工厂”的“对象定义”变得(太)大/复杂时有什么缺点吗?

示例

在游戏引擎中,我有一个非常大的 prototype 类 3D 图形对象,至少对我来说是这样。

它包含:-

  • 3D 网格的指针(句柄)
  • 一个包含 8 个纹理的指针(句柄)(例如,朗伯、高光)
  • 8 种纹理的颜色(例如颜色倍增器) - 每个 4 个浮点数
  • 8 个纹理的自定义设置 - 每个 4 个浮动
  • ~ 10 个布尔标志,用于混合、深度测试、深度写入等
  • (随着项目的进行逐渐添加)

在游戏逻辑中,我缓存了散布在各处的一些(100 个?)原型实例。它们中的大多数都作为字段存储在许多子系统中。
我发现按值存储prototype也很方便。

问题

  1. 除了明显的直接内存/CPU成本外,原型很大时是否会出现“容易被忽视”的缺点?
  2. 确定原型(传入工厂的定义)大/复杂的标准是什么?可以治愈它的补救措施/设计模式是什么?
  3. 原型是否应该存储在业务/游戏逻辑中,而不是通过句柄/指针? (我有这个想法是因为人们倾向于将指针用于大对象,但这是一个非常弱的理由。)

【问题讨论】:

  • 这个问题很可能被否决/关闭,因为它太板并且主要基于意见。你有实际问题吗?
  • 目前没有。但如果我仍然允许它继续下去,我担心会有。我认为预防胜于治疗。
  • 我建议您将可疑代码发送至codereview.stackexchange.com,然后在那里寻求反馈。在发布您的问题之前,请确保您 follow this guide

标签: c++ factory


【解决方案1】:

答案:

  1. 除了明显的直接内存/CPU成本外,原型很大时是否会出现“容易被忽视”的缺点?

    对于一个图形对象,如果你把它和副本放在不同的地方,当你改变对象时,你必须把所有的副本都锁在一个锁下,否则会遇到不一致的问题,这会增加代码的复杂性以及潜在的不一致问题。

  2. 确定原型(传入工厂的定义)太大/复杂的标准是什么?可以治愈它的补救措施/设计模式是什么?

    工厂模式用于对象创建。如果你发现工厂的逻辑或代码太复杂,问题应该是你的对象结构而不是工厂模式。

  3. 原型是否应该通过句柄/指针存储在业务/游戏逻辑中? (我有这个想法是因为人们倾向于将指针用于大对象,但这是一个非常弱的理由。)

    对于你的情况,我推荐 P-Impl 模式或智能指针模式来存储相同的对象,这可以大大减少复杂和对象的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多