完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。最常用的实现方式就是使用if else 语句,但是这种方式将所有使用模块放在了同级水平,造成修改和添加功能时候很容易破坏原有结构。
策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。
策略模式的优点:
1.由于策略类都实现同一个接口,所以使它们之间可以自由切换。
2.增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码。
3.避免使用多重条件选择语句。
在求解器开发中,仍然以调用求解线性方程组库为例,前面介绍了多种线性方程组库,其本质都是求解大规模的Ax=b方程,我们可以在设计之初就使用策略模式,将调用各个库封装成单独的策略,这样在调用的时候就可以根据实际情况选择合适的求解库。不仅有利于开发,也有利于维护扩展和测试。
如上图所示,我们将MKL,Eigen,Blas调用封装成独立的strategy,统一参数调用接口Run()。再需要添加新的库时,按照该接口设计即可,在程序中调用新的库时,无需改动其它接口,保证了功能的独立,不会影响已有功能。
声明:原创文章,欢迎留言与我讨论,如需转载留言