class ITransportProvider
{
public:
virtual ~ITransportProvider() { }
protected:
virtual void SendData() = 0;
// Concrete TransportProvider will call OnReceiveDataEvent
// virtual void RegisterHandlers(std::function<void()> onReceiveDataEvent);
}
class Device
{
public:
Device(shared_ptr<ITransportProvider> transport)
: m_Transport(transport)
{
// transport->RegisterHandlers(boost::bind(&Device::OnReceiveData, this));
}
void SendData()
{
m_Transport->SendData();
}
// Which design pattern to use to get concrete TransportProvider's OnReceiveData event?
//void OnReceiveData()
//{
//}
private:
shared_ptr<ITransportProvider> m_Transport;
};
私はいつも ITransportProvider に "RegisterHandlers" を追加し、Device が c'tor でそれを呼び出せるようにしました。DI/IoC の専門家の目から見たその正しさを知りたいですし、すべての提案を聞きたいです。
編集:
明確にするために、DIとオブザーバーパターンを介した上記の方法以外に、トランスポートプロバイダーをデバイスから切り離すより良い方法があるかどうかを尋ねています。