作者Dreamer77 (追夢)
站內C_and_CPP
標題[問題] C++ 架構問題
時間Sat Jun 16 14:44:25 2012
請問個問題是
有個 IModule.h 純粹的介面
還有個 ModuleImp.h 繼承 IModule.h
另外還有個 ModuleImp.cpp, 而建構就是寫在這//createInstance
現在有個Client 想要使用這個module.
//Client.h
class IModule;
class Client{
public:
Client();
IModule *mModule;
};
//Client.cpp
Client::Client()
{
mModule = ModuleImp::createInstance();
}
我的問題是
那這樣Client.cpp 不僅要include IModule.h, 還要ModuleImp.h
這樣好像就失去了IModule 的目的
另一種作法是module construction 寫在IModule.cpp
但這樣的話 Imodule 要看moduleimp, 而moduleimp 也要看imodule變成互看
不知道是該怎麼處理 如果用一個factory pattern 進來是可以解決
只是感覺很冗 因為繼承Imodule 的就只有moduleimp.
感謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.7.15
※ 編輯: Dreamer77 來自: 203.73.7.15 (06/16 14:44)
※ 編輯: Dreamer77 來自: 203.73.7.15 (06/16 14:46)
※ 編輯: Dreamer77 來自: 203.73.7.15 (06/16 14:47)
→ loveme00835:如果要用到 IModule 定義的介面, include 標頭檔識很 06/16 16:38
→ loveme00835:正常的, 一個.cpp引入很多.h, 跟一個.h被很多.cpp引入 06/16 16:41
→ loveme00835:差別是不一樣的, 雖然你引入了.h, 但是實作看不到就還 06/16 16:42
→ loveme00835:好 06/16 16:42
→ loveme00835:雖然你很想把 Client -> ModuleImp 這條線砍掉, 但是 06/16 16:55
→ loveme00835:基本上如果只會有一個子類"實作"IModule而讓你覺得 06/16 16:56
→ loveme00835:Factory Pattern太冗餘, 那麼從一開始你加入這個介面 06/16 16:57
→ loveme00835:本身就是多餘的 06/16 16:57
→ loveme00835:refactoring一書的Extract Interface一節可以參考一下 06/16 17:06
→ adrianshum:請參考 Bridge pattern, 也常叫做 PImpl,有一種用法 06/17 00:40
→ adrianshum:應該蠻合你的需要 06/17 00:40
推 mingtai1:Client對IModule操作若無多型考量,就用IModuleImp就好了 06/23 02:50