[問題] C++ 架構問題

看板C_and_CPP作者 (追夢)時間13年前 (2012/06/16 14:44), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/2 (看更多)
請問個問題是 有個 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)

06/16 16:38, , 1F
如果要用到 IModule 定義的介面, include 標頭檔識很
06/16 16:38, 1F

06/16 16:41, , 2F
正常的, 一個.cpp引入很多.h, 跟一個.h被很多.cpp引入
06/16 16:41, 2F

06/16 16:42, , 3F
差別是不一樣的, 雖然你引入了.h, 但是實作看不到就還
06/16 16:42, 3F

06/16 16:42, , 4F
06/16 16:42, 4F

06/16 16:55, , 5F
雖然你很想把 Client -> ModuleImp 這條線砍掉, 但是
06/16 16:55, 5F

06/16 16:56, , 6F
基本上如果只會有一個子類"實作"IModule而讓你覺得
06/16 16:56, 6F

06/16 16:57, , 7F
Factory Pattern太冗餘, 那麼從一開始你加入這個介面
06/16 16:57, 7F

06/16 16:57, , 8F
本身就是多餘的
06/16 16:57, 8F

06/16 17:06, , 9F
refactoring一書的Extract Interface一節可以參考一下
06/16 17:06, 9F

06/17 00:40, , 10F
請參考 Bridge pattern, 也常叫做 PImpl,有一種用法
06/17 00:40, 10F

06/17 00:40, , 11F
應該蠻合你的需要
06/17 00:40, 11F

06/23 02:50, , 12F
Client對IModule操作若無多型考量,就用IModuleImp就好了
06/23 02:50, 12F
文章代碼(AID): #1Ft2jCiO (C_and_CPP)
文章代碼(AID): #1Ft2jCiO (C_and_CPP)