我解析/處理來自許多不同流(具有不同格式)的數據,並且不同數據源的數量在我的系統中不斷增長。我有根據配置文件中的工廠類指定源給我適當的解析器/處理器對(守法的小共用接口)的東西要求是這樣的:如何模塊化大型工廠類?
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
選項......它以某種方式暗示了即插即用的概念,但我不確定什麼是一種好的方法問題會是。
我不是抽象工廠的專家,所以我會將此作爲評論,而不是答案。如果你給每個源的'FooFactory'一個方法(例如'createFooA(...)','createFooB(...)'),那麼你將不必爲實際不使用的源提取代碼在二進制文件中。如果我理解你的問題,我*認爲*也解決了你的第二個問題。 – Beta