我有一个程序,其中包含许多变量A,B,C ...,并且它们具有依赖关系。例如,C的值取决于A和B的值。每当变量的值更改时,我都需要更新其所有下游变量。例如,如果A的值被更改,我将需要重新计算C的值。如果C的值也被更改,我将需要重新计算依赖于C的那些变量的值。现在我有了这样的代码:
A a;
B b;
C c;
// ...
void updateC()
{
C newC = calculateC(a, b);
if (c != newC)
{
c = newC;
updateD();
updateE();
}
}
随着变量数量的增加,此代码很难维护。还有复杂的逻辑,例如,如果updateD成功,则无需调用updateE。是否有针对此类问题的标准设计模式或库?
答案 0 :(得分:0)
在矩阵m中计算图的transitive closure。现在m(i,j)(或m(j,j))会告诉您事物i是否依赖于事物j。将此(或它的转置)乘以更改后的向量(j发生变化的地方,在其他地方为零),将为您提供需要更新的向量。
此外,您还必须生成strict partial order并按此排序。
答案 1 :(得分:0)
本质上,您需要解耦对象A,B,C ...,这可以使用中间人即调解人模式来实现:
https://en.m.wikipedia.org/wiki/Mediator_pattern
使用Eventbus模式:
http://wiki.c2.com/?DataBusPattern
使用Pub-Sub模式:
https://en.m.wikipedia.org/wiki/Publish-subscribe_pattern
观察者模式:
https://en.m.wikipedia.org/wiki/Observer_pattern
更一般的反应式编程: