我正在开发一个项目,需要将一个固定长度的文件反序列化为一个对象结构。
该文件具有以下基本结构:
- 文件头数据
-----团体
----------细节
通常这是一项简单的任务,但是这种特殊的文件格式对于详细记录有大约10种不同的子格式。例如,如果详细信息行以代码' 7'开头。然后是它的格式ABC,字段与格式XYZ截然不同(从#8;'开始的行)。
所以我的问题是,我可以用什么设计模式以优雅的方式实现它?
我的第一个想法是使用DetailType枚举属性创建一个通用详细信息类,并且还有一个名为SpecData的IDetailSpec类型的属性。 IDetailSpec真的只是一个标记界面。然后每当我使用Detail对象时,我都会检查DetailType属性,并根据上下文对SpecData属性进行强制转换。
然而,这感觉"错误" :)
欢迎任何想法!
答案 0 :(得分:1)
我建议创建一个基类来处理所有不同细节类型之间保持相同的字段。 (对于现在来说,更改的数据将会#C;反序列化"到单个字段中。)然后,您将为每种类型的详细记录创建不同的子类,并使用工厂类型模式创建适当子项的实例基于详细行代码的类。每个子类都将从基类对象"详细数据"中反序列化。字段。