c++ - 一个大工厂类如何模块化?

标签 c++

<分区>

我解析/处理来自许多不同流(具有不同格式)的数据,并且我的系统中不同数据源的数量不断增加。我有一个基于指定源的配置文件的工厂类,它将给我适当的解析器/处理器对(遵守一个小的通用接口(interface)),请求如下:

static Foo* FooFactory::createFoo(source c, /*couple flags*/)
{
    switch (c)
    {
        case SOURCE_A:
        {
         //3 or 4 lines to put together a parser for A, and something to process stuff    from the parser
             return new FooA(/*args*/);
        }
        break;
        //too many more cases which has started to worry me
        default:
            return NULL;
    };
}

问题是随着资源数量的增加,我面临两个问题。首先,当我构建时,我发现自己拉入了所有 FooA、FooB、FooC、FooD、FooE... 相关代码——即使我可能只对构建一个我在其中的二进制文件感兴趣假设我们只请求 FooA。那么如何进行模块化呢。第二个问题是,现在对于 SOURCE_A,我返回 FooA,但是如果我对 SOURCE_A 感兴趣怎么办,但是我有解析它的不同方式,也许我想要 FooA_simpleFooA_careful 但也具有即插即用的能力?

出于某种原因,想到的一件事是构建二进制文件时链接器的 -u 选项......它以某种方式向我暗示了即插即用的概念,但我是不确定解决问题的好方法是什么。

最佳答案

好吧,您只需创建一个工厂接口(interface)并在该工厂的子类型之间划分逻辑。因此,libFooA 可能有一个子工厂(类型/实例),而 libFooB 可能有另一个。然后,您可以根据要在特定场景/程序中支持的子工厂/库简单地创建一个复合工厂。然后你甚至可以进一步 segmentation 工厂。您还可以为您的复合类型创建工厂枚举器并取消所有切换逻辑。然后你可能会告诉你的 libFooA 工厂实例在更高级别启用仔细模式或简单模式。因此,您的 FooFactory 实例和子类型图可以很容易地变化,并且类结构可以像一棵树。库是一种将依赖性降至最低的方法,但可能还有更合乎逻辑的方法来划分专门的子工厂。

关于c++ - 一个大工厂类如何模块化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13263217/

相关文章:

c++ - 将目录从编译器传递到 C++ 应用程序

c++ - 使用正向迭代器反向迭代

c++ - 使用 QTestLib 编写单元测试

c++ - 访问说明符在 typedef 和前向声明中的作用

c++ - Qt - std::unordered_map - 销毁时间

c++ - 冒泡排序未正确排序或输出数组值

c++ - C++ 是否为纯虚拟类创建默认值 "Constructor/Destructor/Copy Constructor/Copy assignment operator"?

c++ - 创建类链接错误

c++ - MFC自定义CEdit密码支持

c++ - 隐藏包含父库