利用观察者模式设计仿真器内核接口

在JDF电路仿真软件中,仿真器内核是仿真软件的核心模块,其余模块的功能都是建立在此基础之上,即它们都依赖于仿真器的分析工作。这些模块包括电路图编辑环境、命令处理器、事件日志记录、自动化测试框架等。此处是一个典型的“多对一”的依赖关系,当仿真器运行到相应状态的时候,必须去更新依赖于它的其余模块,保持整个系统状态的一致性。GoF23个Design Pattern中的观察者模式(Observer Pattern)是处理这种关系的一种很好方法。采用观察者模式完成了仿真器对外接口的设计。此处利用观察者模式的好处是增加了系统的灵活性和扩展性,以后即使有新的功能模块需要利用仿真器的功能,也可以在不改变仿真器核心程序的情况下将新模块动态地加入到系统中。仿真器对象与其它功能模块对象的关系如图所示。

此处将仿真器作为主体对象(subject),所有需要利用仿真分析结果的外围模块作为不同的观察者对象 (observer),仿真器的实现类Simulator实现了Subject接口中的三个方法(Notify,Attach,Detach),而所有的观察者模块对象都实现了Observer接口的Update方法。所有的观测者对象通过数据连接机制在仿真器对象上注册。当仿真器对电路做出分析后,它会将事件的相关信息记录在一个消息结构EventRecord之中,然后依次调用注册观察者对象的Update方法,并将EventRecord作为参数传递给各个外围模块。外围模块收到仿真器的更新消息后,会根据消息内容和自身功能需要做相应的处理,其中用户界面模块会改变电路图的显示界面以向用户直观地显示电路的当前状态,命令操作模块会记录相应的信息以便实现Undo/Redo操作,事件日志记录模块会将事件内容记录在日志文件中,自动化验证框架会根据事件内容去跟预期结果作比较以判断电路设计是否满足需求。
PS.今天看ObjectARX框架的时候发现AutoCAD的API设计也是运用了类似的机制来处理的~~ 

你可能感兴趣的:(利用观察者模式设计仿真器内核接口)