看板 C_and_CPP 關於我們 聯絡資訊
請問個問題是 有個 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