我有一个抽象工厂类,它保存一些类型的映射(特定于应用程序的类型作为整数)和指向工厂对象的指针。此映射在抽象工厂的构造函数中初始化,该构造函数具有名为IFactory* get_factory_for_type(int)
的方法。 IFactory
是所有工厂类必须继承的接口。
我还需要一个表示每个工厂可以生成的对象的字符串以及所有可用对象类型的列表。
如果我在抽象工厂(类型std::map<int, std::string>
)和两个方法std::string get_name_for_type(int)
和std::vector<std::string> get_type_names()
中添加另一个地图,那么它是一个很好的方法吗?
我很担心这样做,因为抽象工厂应该只负责创建对象工厂。有更好的方法可以做到这一点,还是可以在抽象工厂中做到这一点?
答案 0 :(得分:1)
抽象工厂的目的是能够创建一组特定的对象,但适用于特定环境。学校书籍示例适用于windows / linux / mac等,但更相关的示例是针对不同的持久性选项。
由于工厂创建的类型应该是已知的,我没有理由对某些对象进行枚举,因为对象应该对所有不同的环境保持相同。
那就是说,没有人说你必须盲目地遵循模式。我建议你记录偏差并解释它的目的。
答案 1 :(得分:0)
Factory用于存储集合并提供获取它的方法。如果您需要从对象获取详细信息,更多的是翻译而不是工厂,或者您可以为其创建扩展方法。
翻译细节:Translator