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

+0

Спасибо за разъяснение. На самом деле мой вопрос состоял в том, что существует лучшая модель проектирования для реализации «родительской» замены во время выполнения. Однако этот выглядит нормально .. – VladimirLenin

ответ

1

Этот подход для взаимодействия вашего поведения кажется прекрасным, но я бы избавился от setSource и передал вместо него целевой источник в конструкторе.

0

Я нашел шаблон Decorator, который, похоже, точно отражает эту ситуацию.