Abstract Factory模式和Builder模式是使用最广泛的两种创建型设计模式。之所以把两者放到一起,是因为两者有共同的地方,利用这两种模式可以优化对象创建的流程。
本文利用设计模式解决两个创建流程问题:
1. 单物理场网格生成前有限元模型的创建
2. 多物理场网格生成后有限元模型的创建
Abstract Factory模式的意图是 是为创建一组(有多类)相关或依赖的对象提供创建接口。
以稳态温度场为例,假设荷载,约束可以加载到任意几何上,即可以加载点,线,面,体上。那么数据结构可以定义如下:
创建过程使用Abstract Factory模式,如下:
使用Abstract Factory(抽象工厂)模式有如下好处:
1.封装了产品的创建,使得不需要知道具体是哪种产品,只需要知道是哪个工厂就行了。
2.可以支持不同类型的产品,使得模式灵活性更强。
3.可以非常方便的使用一组中间的不同类型的产品。
在上例中,用户可以根据分析类型,材料类型,几何映射边界约束和荷载构建不同的创建流程。
2. 多物理场网格生成后有限元模型的创建,以稳态温度场为例
任意一个单物理场有限元模型创建流程如下:
void Create_FEM_Model()
{
//创建单元数据,网格已经生产成
createElement_x_2_Material();
//创建边界约束.
BuildGeometry2Load();
//创建荷载.
BuildGeometry2Constrain();
//设置分析类型.
SetAnalysisType();
}
理论上附属在几何上的属性在划分网格后都映射到结点(Vertex)和单元(Element)上。对于多物理场的创建也一样。
Builder模式的意图是 将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
利用Builder模式创建多物理场:
使用Builder模式的优点:
1、建造者模式的“加工工艺”是暴露的,这样使得建造者模式更加灵活。
2、解耦了组装过程和创建具体部件,使得我们不用去关心每个部件是如何组装的。
上例中对于多物理场,每种物理场的边界荷载都是不一样的,通过Builder模式可以不用关心单个物理场的实现,将创建过程和具体的创建解耦。增加了结构的灵活性和可扩展性。
声明:原创文章,欢迎留言与我讨论,如需转载留言