c++ - 依赖图的设计模式

标签 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。是否有针对此类问题的标准设计模式或库?

最佳答案

本质上,您需要解耦对象 A、B、C...,这可以使用中间人实现,即中介者模式:

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

使用事件总线模式:

http://wiki.c2.com/?DataBusPattern

使用发布-订阅模式:

https://en.m.wikipedia.org/wiki/Publish-subscribe_pattern

观察者模式:

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

更普遍的响应式(Reactive)编程:

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

关于c++ - 依赖图的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602540/

相关文章:

php - 投票加权算法

java - Java的异常处理机制是责任链设计模式的一个例子吗?

java - 如何子类化 Java 构建器类?

c++ - 将 int 传递给需要枚举数据类型的函数

c++ - 是否需要使用new关键字创建容器(集合, vector 等),以便在函数之间持久存在?

c++ - 如何制作类似类的 "variadic" vector

C++比较字符串的连续整数

algorithm - if(N^2%N==0) 的大 O 表示法的时间

c# - 随机一组 float 的最佳排序算法是什么?

javascript - 我没有看到 knockout 值(value)进入我的绑定(bind)文本字段