0

我正在制作一个程序,该程序从我称为脚本的文件中获取输入。脚本只包含一系列信息。将来,我将需要每个脚本包含更多信息,因此我将每个脚本与一个版本号相关联。

任何脚本文件中的信息都可以完全包含在一个名为 EntityStatePdu 的特定类中(其细节对于这个问题并不重要)。因此,我决定开设以下课程:

1) 抽象类 Script
2) 类 ScriptV1 扩展 Script
3) 类 ScriptV2 扩展 Script
4) ...

我让每个脚本文件都以其版本信息开头。因此,版本 1 脚本以“scriptV1”开头,版本 2 脚本以“scriptV2”开头。我想将不同的脚本版本抽象到脚本类中。

因此,理想情况下,我希望在名为 FromFile 的 Script 类中有一个工厂方法,这样调用会Script.FromFile("scriptVersion1.txt")返回一个有效的 ScriptV1 对象,而调用会Script.FromFile("scriptVersion2.txt")返回一个有效的 ScriptV1 对象。我想要FromFile读取文件的方法,通过查看文件的开头来确定它的版本,并实例化适当的 Script 子类。这将使该类的用户可以使用任何脚本文件,而与版本无关。

你将如何编写这个FromFile工厂方法?你会建议一个不同的班级设计吗?某种设计模式?

谢谢!

4

1 回答 1

0

将静态变量添加到 Script 类以包含从字符串(例如“scriptV1”)到相应类的实例的映射。在 FromFile 方法中,提取字符串,在地图中查找,克隆实例并返回它。作为初始化阶段,子类需要在映射中相应的字符串下注册自己的实例。

于 2012-05-09T02:00:59.933 回答