2015-01-15 58 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

我发现装饰模式,似乎完全表达这种情况。