【问题标题】:Designing operation (a,b) -> (c,d)设计操作 (a,b) -> (c,d)
【发布时间】:2012-06-15 21:09:00
【问题描述】:

我有一个需要设计的操作。该操作采用某个类 X 的两个对象,并返回同一类的两个新对象(我以后可能需要原始对象)。指示选择该对象的逻辑包含在 Y 类中。一方面,我不希望 Y 类知道有关 X 类实现的细节;另一方面,我不希望 X 类知道有关选择不同对象来执行此操作的详细信息。

如果这就是问题的全部,我只需在 A 类上创建一个静态方法。但是,我正在使用的语言中的方法只返回一个对象。此外,该操作需要稳健,不能两次调用操作分别获得 C 和 D,因为 C 和 D 都依赖于单个随机数。

我应该如何设计这样的操作?

更新:我正在使用 Obejctive C。

【问题讨论】:

  • 如果您告诉我们您使用的语言可能会有所帮助
  • 也许您可以创建一个 Mapper,获取 X 信息并将其转换为 Y 对象,让 Y 对象进行内部映射,然后将其转换回 X 对象。如果您不是更具体,我们无法真正帮助您。 :(
  • Objective C. @DonalFellows 不创建一个数组只是为了返回两个元素会太慢吗?
  • @golergka 此操作多久调用一次? “太慢”只在瓶颈中真正重要。您已经创建了两个堆对象,再分配 8-16 个字节不会有太大变化。
  • @millimoose 这是我正在编写的遗传编程工具中的交叉操作,所以我认为它会被调用很多并且很容易成为瓶颈。

标签: objective-c oop


【解决方案1】:

我决定只用静态方法修改给定的对象 A 和 B。在调用此方法之前,我必须复制它们,但我认为它不会比创建新方法慢;无论如何,对象 C 和 D 中的大部分信息都是从 A 和 B 派生的。

(我仍然认为这是一个丑陋的解决方案,并将欢迎更合格的答案)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2018-09-14
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多