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