2015-01-15 59 views
0
class MyTransport : public ITransport 
{ 

void setSource(ITransport* src) { m_source = src; } 

/* implement ITransport using m_source */ 

private: 
    ITransport* m_source; 
}; 

我需要加載(在運行時)一些ITransport並自定義其輸出。同時我需要爲我的客戶提供ITransport。 (之前通過從SourceTransport繼承而來,但現在轉移到插件)將繼承改爲合成

這是正確的方法嗎?

+2

我認爲這個問題有點不清楚......如果它適合你的需要,那麼是的(你畢竟是那個決定解決方案是否正確的人)。如果你的問題是,你所做的是從oop的角度來看是否是合成:是的,如果你是給定ITransport的內存所有者,那麼不,如果你不是內存所有者(如果你不是內存所有者,它將是一個聚合)。 – MichaelCMS 2015-01-15 16:57:37

+0

感謝您的澄清。其實我的問題是關於在運行時是否有更好的設計模式來實現「父」替換。但是這個看起來不錯。 – VladimirLenin 2015-01-15 19:20:32

回答

1

這種干涉你的行爲的方法看起來不錯,但我會擺脫setSource,並在構造函數中傳遞目標源代碼。

0

我發現裝飾模式,似乎完全表達這種情況。