首页/文章/ 详情

FEM之在求解器中使用设计模式(8)---Command和Observer模式

3年前浏览1357

Command(命令)模式和Observer(观察者)模式也是软件研发中常用的设计模式。

Command模式使用场景:

1.系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。

2.系统需要在不同的时间指定请求、将请求排队和执行请求。

3.系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。

4.系统需要将一组操作组合在一起,即支持宏命令。



具体解释:我们在求解器研发中的各种数据加载,计算,流动都可以看成是由命令发出。我们可以将各种命令的发出者,具体实现者,发出模式,命令管理等分别开来,使其可以独立运行。


Observer模式使用场景:

定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

具体解释:比如后处理应力数据有多种表现形式:二维XY视图,云图,报表等,当原始数据发生改变时候,这些视图接受到数据变动通知时,其表现内容可以自动更新。


一个具体例子来说明Command模式和Observer模式的使用:

以最简单的静力分析为例,在求解器中我们将整个流程定义如下:

1. 加载网格数据;

2. 加载材料数据;

3. 加载边界和荷载;

4. 组装单刚矩阵;

5.组装总刚矩阵;

6.组装荷载;

7.求解方程组.


需求如下:

  1.  载入数据后形成总刚矩阵,中途修改材料数据,再次组装总刚矩阵。


我们将每一步操作都对应为为一个Command,将数据的修改使用Observer模式。具体UML如下图:


图片


  1. 所有命令从ICommand继承,每个具体的Command对应一个步骤;

  2. 加载材料数据后形成MaterialData

  3. MatrixAobserver实现Observer的Update接口,并在总刚矩阵中设置MatrixAObserver,当材料数据改变时,调用Observer接口更新刚度矩阵

  4. CommandController控制所有的命令执行,获取命令状态,以及命令调度;

通过Command和Observer模式,可以实现求解器中顺序调用过程,执行状态和数据的解耦,在不影响数据结构的情形下实现数据的动态更新。

改进:

  1. 求解器中所有的流程都可以采用Command模式,建立更细度的流程控制体系;

  2. 完善命令管理类,添加命令流程,状态,逻辑,序列管理;

  3. 在求解大规模线性方程组过程中,尽可能使用数据缓存 观察者模式以提升求解性能,避免无谓的流程重复性能开销。

声明:原创文章,欢迎留言与我讨论,如需转载留言

理论科普求解技术其他软件
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-03-18
最近编辑:3年前
多物理场仿真技术
www.cae-sim.com
获赞 126粉丝 319文章 220课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈