【问题标题】:Is prototype pattern the right fit here?原型模式在这里合适吗?
【发布时间】:2013-01-23 13:43:07
【问题描述】:

我有一个Cell 类型的数组。这是一个二维数组。 根据某些条件,我可能需要调整此数组的大小并将Cell 对象向下/向右/向左移动一行或一列。

我正在考虑使用原型模式将原始数组复制到另一个更大的数组中。

与简单地调整数组大小相比,这是否提供更多好处?

编辑:我意识到我没有提到我的意图。我真的不需要另一个对象。我只是想要一个基于某些条件的更大的数组。

【问题讨论】:

  • 这对您有什么帮助?应对原型基本上是克隆,但你想要不同的对象。
  • @Andrey,更新了原始问题。
  • 可能有更好的方法来做到这一点,例如让一个单元格属于一个行列表和一个列列表。这可以允许插入一行而不必更新所有项目。如果这是频繁的操作,这可能会便宜得多。
  • @Chriseyre2000,你说得有道理!是的,这是一个非常频繁的操作。
  • 因此有一个列和行对象的有序列表,这些对象本身具有引用容器以获取当前索引的单元格列表。以这种方式移动色谱柱要便宜得多。如果它是一个稀疏数组(或者可以有一个合理的默认值),您只需要设置已更改的单元格。

标签: c# oop design-patterns prototype-pattern


【解决方案1】:

这可能会有所帮助的唯一原因是如果您正在制作副本:复制可以节省您创建新对象的成本。它的另一面是数组内的所有Cell 对象将在多个二维数组之间共享;如果出现问题,您应该重新从头开始创建数组。

【讨论】:

  • 共享Cell 对象没有问题——正如我在意图中提到的,我基本上需要一个新对象。我没有想到浅拷贝的优势。谢谢!
【解决方案2】:

简答号

有一个替代解决方案可以在不需要原型的情况下解决您的问题。

不要将单元格存储在数组中。 单元格不知道它们的行号和列号,而是询问行/列。 这允许重新排列列,而不必更新每个项目。

拥有一个表示数组的容器对象,并且可以返回给定 (x,y) 坐标处的单元格。如果数组是稀疏的(或者如果它具有合理的默认值),则将丢失的单元格视为默认值。这将大大降低存储成本。 列和行属于容器。添加空行或空列现在变成插入行或列对象的情况。

【讨论】:

  • 听起来不错。在我之前的实现中,我计划用Cell 制作一个二维矩阵。我可以使用索引访问每个单元格。为了确定 x,y 处的单元格 - 我计划将两个变量 offsetXoffsetY 引入到 Cell。现在转移将涉及在每个对象中更改这些。这是你的想法吗?
  • 我建议偏移量属于单元格引用的单独列或行对象。这意味着插入新行只需要在行列表中添加一行并更新移动行的行偏移量。
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多