依赖图的设计模式

时间:2019-02-09 02:18:18

标签: c++ algorithm design-patterns

我有一个程序,其中包含许多变量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。是否有针对此类问题的标准设计模式或库?

2 个答案:

答案 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

更一般的反应式编程:

https://en.m.wikipedia.org/wiki/Reactive_programming