在开发求解器过程中,经常会碰到一种情况:需要换一种线性方程组求解工具,比如最开始使用入门上手的Eigen,矩阵规模上来之后需要用PETsc或者MKL。如果一开始没有考虑到这种需求,很容直接使用Eigen的数据结构,将原始的数据结构和Eigen耦合在一起;此外可能一开始不需要全部转成PETsc格式,仍然需要Eigen数据结构和某些功能;还有可能已经有第三方封装好的MKL或者PETSc或者求解器不仅自己需要,还要满足给第三方的接口。
当然这些需求可以通过面向过程的编码方式实现,但从代码的可重用以及代码维护,扩展角度看,用面向对象的方式更灵活,更易于封装和模块化。
Adaptor 适配器也是一种常见的设计模式,主要作用把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。
关于Adaptor最通俗的解释就是电源接口的转换,比如我们国家的电压是220伏,国外是110伏,所以国内的电子产品到国外使用就需要用转换器,将110伏转成220伏,这个转换器就可以认为是Adaptor的具体表现。
如上图所示,用户原来调用的是MKL的接口,通过adpater接口,可以调用Adaptee的Eigen接口。这样既不用改动原来Eigen接口,也无需改动MKL接口。通过adapter实现数据转化和调用,最大程度实现了解耦功能。
---------------------------------------------------------------------------------------------
版权声明:
原创文章,来源多物理场仿真技术,本文已经授权,欢迎分享,如需转载请联系作者。