这似乎是一个广泛的问题,但当我在我的一个项目上优化代码时,它让我感到震惊。
我们说我有一个对象数组,我需要更新。
让我们说每个对象都有自己的方法,计算一些应用程序状态 (直到对象循环结束时才保持不变)
for *every* object in *array*
object.update();
inside object:
... compute.something();
这导致一个过程,其中每个对象"计算"这个值本身并适用它。
所以我坐在那里思考,如果我得到一个基本计算相同的东西的所有项目的列表并在循环之前计算它并将结果推送到循环本身?
导致类似
computeData
for *every* object in *array*
object.update(computeData);
inside object:
apply(computedData);
使用这种结构,我不需要计算n次的所有内容,其中n是对象数组的大小,但只需一次。
我之前从未听说过这种方法,并想问这是否正在使用/教导/应用或不是?我知道我没有找到任何黄金左右,只是想知道你的意见,如果我将来从一开始就专注于这个结构......?
答案 0 :(得分:3)
我对你的问题并不完全清楚,但看起来可能有三种设计模式:
1 - 记事本
https://en.wikipedia.org/wiki/Memoization
第一次使用该输入调用经常调用的函数的结果(对于给定的输入)。这意味着重复调用意味着每次都不会重新执行相同的工作。
2 - 观察者模式
https://en.wikipedia.org/wiki/Observer_pattern
可以注册对象以侦听另一个对象中的更改/触发器。在这种情况下,您的每个对象都可以向中央“循环”对象注册,并在触发“我想要更新数据”操作时发回值。
3 - 回调模式
https://en.wikipedia.org/wiki/Callback_(computer_programming)
更一般地说,单个对象能够在中心对象请求时返回值的想法。
如果您有这些想法,我建议您阅读Design Patterns。经典的"Gang of Four"书已经很老了,但这些想法仍然存在。