我有一个具有以下结构的应用程序:
(删除图片,我无权发布图片。请参阅此处:http://s15.postimg.org/98qc3p7uz/Capture.png)
所以'App'持有Manager实例,Manager持有'Connection'的向量,每个都持有一个Protocol,每个Protocol都有一个通信类。所有通信类都引用单个HAL类。
目前,通信类构造函数获取HAL实例作为单例,例如。 hal = HAL :: GetInstance()。
为了使开发和测试更容易,我想删除这种依赖。依赖注入模式似乎是理想的,因为它允许我使用假的HAL。
但是,我不认为通信类应该对HAL做任何事情,同样是协议类和连接。
主要的'App'类有一个参考,但是我不确定是否将它传递给Manager-> Connections [x] - > Protocol-> Communication。
也许我可以将它抽象出来并让Manager有一个对HAL的引用,然后每个连接都可以有一个指向Manager的父指针,但是为了提供一个HAL,这一切似乎都变得混乱和过于复杂类引用通信。
有更好的方法吗?
答案 0 :(得分:0)
您可以让Manager创建Connection
,Protocol
,Communication
和HAL
的实例。然后管理器连接所有这些。 C ++中非常简单的例子:
Manager::createEverything()
{
Connection connection;
Protocol protocol;
Communication communication;
HAL hal;
communication.setHal(hal);
protocol.setCommunication(communication);
connection.setProtocol(protocol);
}
您也可以使用依赖注入来创建不同的HAL
- 实现方式。课程设计可能如下所示:
以上内容非常简单,但应该给你一个想法。更多的想法:
IHAL