Command(命令)模式和Observer(观察者)模式也是软件研发中常用的设计模式。
Command模式使用场景:
1.系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
2.系统需要在不同的时间指定请求、将请求排队和执行请求。
3.系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
4.系统需要将一组操作组合在一起,即支持宏命令。
具体解释:我们在求解器研发中的各种数据加载,计算,流动都可以看成是由命令发出。我们可以将各种命令的发出者,具体实现者,发出模式,命令管理等分别开来,使其可以独立运行。
Observer模式使用场景:
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
具体解释:比如后处理应力数据有多种表现形式:二维XY视图,云图,报表等,当原始数据发生改变时候,这些视图接受到数据变动通知时,其表现内容可以自动更新。
一个具体例子来说明Command模式和Observer模式的使用:
以最简单的静力分析为例,在求解器中我们将整个流程定义如下:
1. 加载网格数据;
2. 加载材料数据;
3. 加载边界和荷载;
4. 组装单刚矩阵;
5.组装总刚矩阵;
6.组装荷载;
7.求解方程组.
需求如下:
载入数据后形成总刚矩阵,中途修改材料数据,再次组装总刚矩阵。
我们将每一步操作都对应为为一个Command,将数据的修改使用Observer模式。具体UML如下图:
所有命令从ICommand继承,每个具体的Command对应一个步骤;
加载材料数据后形成MaterialData
MatrixAobserver实现Observer的Update接口,并在总刚矩阵中设置MatrixAObserver,当材料数据改变时,调用Observer接口更新刚度矩阵
CommandController控制所有的命令执行,获取命令状态,以及命令调度;
通过Command和Observer模式,可以实现求解器中顺序调用过程,执行状态和数据的解耦,在不影响数据结构的情形下实现数据的动态更新。
改进:
求解器中所有的流程都可以采用Command模式,建立更细度的流程控制体系;
完善命令管理类,添加命令流程,状态,逻辑,序列管理;
在求解大规模线性方程组过程中,尽可能使用数据缓存 观察者模式以提升求解性能,避免无谓的流程重复性能开销。
声明:原创文章,欢迎留言与我讨论,如需转载留言