我解析/处理来自许多不同流(具有不同格式)的数据,并且不同数据源的数量在我的系统中不断增长。我有一个工厂类,它基于指定源的配置文件将为我提供适当的解析器/处理器对(遵守小型通用接口),如下所示:
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_simple
并且FooA_careful
还具有即插即用的能力,该怎么办?
出于某种原因,我想到的一件事是-u
在构建二进制文件时链接器的选项......它以某种方式向我暗示了即插即用的概念,但我不确定解决这个问题的好方法是什么。