Builder(建造者模式)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说Builder模式中对象不是直接返回的。而在AbstractFactory模式中对象是直接返回的,AbstractFactory模式强调的是为创建多个相互依赖的对象提供一个同一的接口。
适用于以下情况:
1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2)当构造过程必须允许被构造的对象有不同的表示时。
求解器的实现过程其实都大同小异,完全可以用相同的过程来组织,而对应的不同的求解器的具体实现可以封装起来。
在求解器中的步骤一般为:
1. 读入节点信息;
2. 读入网格单元信息;
3. 读入体属性(材料);
4. 读入荷载属性;
5. 读入边界属性;
6. 读入求解器属性;
7. 组装求解矩阵和向量;
8. 求解方程组;
不同的求解类型求解方法可能不同,但是整体流程可以按照上述顺序固定下来。如果有不同的内容,可以放到其中任意一个步骤中。对于多物理场的处理,对应的UML图如下:
这样做的好处是:
1. 接口统一,在求解器调用端不必知道每个求解器内部的求解细节;
2. 每个求解器相对独立,可以独立变化;
Builder有点类似于Abstract Factory, 但是Builder强调的是顺序过程相同,即表现形式相同,而内部可以不同。PDE的组成形式千变万化,一个小的参数也可能导致整个方程性质的变化。但是万变不离其宗,使用FEM求解PDE的流程都是一样的。
从代码设计角度看,Builder模式是一个非常合适组织多物理场求解器的软件设计方法。
声明:原创文章,欢迎留言与我讨论,如需转载留言