2011-11-15 45 views
1

我不知道标题是否合适,但这是一个设计问题。 我正在设计一个Java类,它有一个重度计算的方法,我想知道有一种干净的方法可以在每次调用方法时都避免这种计算。我知道调用代码可以处理这个问题,但它应该始终是调用代码的责任?每次调用类方法时都要避免计算

详细说明 - 我正在用一种方法来计算千度矢量的类,以计算幅度。所以每次调用这个方法时,它都会计算所有维度上的幅度。

+1

隐藏缓存后面的计算,只有在向量更新后才重新计算? – mcfinnigan

回答

0

只需将结果缓存在班级内部的某些结构中即可。一旦调用该方法,它就会查看它是否具有先前在缓存中计算的结果并将其返回。在另一种情况下,它执行计算并将结果存储在缓存中。尽管如此,请注意记忆。

0

使用标志指示是否有改变你的载体或没有这个概念。如果有变化,那么该方法应该做一个完整的计算或者只对变化应用计算,但是你需要考虑到班上其他人的所有实现,并且确保该标志在每次值被修改。

第二种方法是使用缓存。这是通过存储之前计算的结果并在计算之前查找它来完成的。但是,如果你的对象的关键值没有太多变化,那么这种方法只能工作得很好,否则你最终会使用大量的内存。尤其是,如果您的键值具有double类型,那么如果它们不完全相等,则可能不会找到键值。

0

如果“千维向量”在c'tor中传递,您可以计算c'tor的大小并存储在某个私有成员变量中。

几件事情要照顾的是:

  • 如果有方法来添加/删除载体或载体的内容,那么你需要更新这些方法的幅度。
  • 如果你的类应该是线程安全的,那么确保适当的写入函数是原子的。
0

幅度有多大变化?这是不可变的吗?你控制的矢量界面有多少?具体而言,您是否有任何方法来确定1000维空间中的旋转或其他保持量级的变换?您可以只为状态存储状态,当值更改时标记,仅在必要时重新计算。如果你的转换有很好的内部结构,你可以跳过基于这些知识的计算。

相关问题