属性模式是笔者提出的一种设计模式,本质上是针对求解器数据的特点,对已有设计模式的融会贯通和应用。
问题的提出:
求解器处理的单元数据有如下特点:
1.单元数据量大,一般都在百万千万级别以上;
2.单元几何数据格式固定,含有各种属性数据;
3.单元的属性种类多,且较多重复数据;
4. 一个模型中单元类型数有限;
5. 不会有海量的属性数据;
属性模式需要使用以下基本设计模式:
享元(flyweight)模式;
工厂模式;
Composite模式;
单例模式
扩展可以加入:
桥接模式;2. 观察者模式
UML图如下:
说明:
单元类简化为只包含单元索引,属性索引和节点索引编号;
属性类定义为使用composite模式的类,即一个属性中可以包含多个属性,定义了每种属性的具体数据;
PropertyManager为使用单件模式的属性管理类,使用该类可以取得单元索引的属性类;
PropertyFlyweightFactory为使用享元模式的工厂类,该类使用工厂模式根据有限元数据创建所有属性类;且每种属性类唯一对应一个索引。
改进:
1.该模式中当数据改变时,可以加入Observor模式,更新每种属性数据;
2.属性可以根据实际情况利用Bridge模式分成固定的几大类型,比如几何,网格,荷载类型等等;
属性模式的优点:
1. 将单元内部的属性转移到外部,简化单元内部数据结构,从设计上避免大量数据的拷贝;
2. 通过外部属性的管理,将属性和单元分离,使得属性和单元在设计上可以独立变化;
3. 通常情况下,一个模型的单元类型的属性都是相同的,所以属性模式能很好的满足求解器的数据要求,尤其是非通用仿真求解器。
属性模式针对使用有限元方法的求解器数据结构管理,具有普遍适用性。
属性模式的缺点:
1. 需要管理复杂的属性类,当属性类别越来越多时,增加管理复杂度;
2. 数据量大的时候,属性数据操作会有一些性能损失,当然跟求解器计算时间相比,微不足道。