设计策略,阶级关系

时间:2014-04-12 10:27:43

标签: c++ class oop

我有一个具有以下结构的应用程序:

(删除图片,我无权发布图片。请参阅此处: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,这一切似乎都变得混乱和过于复杂类引用通信。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以让Manager创建ConnectionProtocolCommunicationHAL的实例。然后管理器连接所有这些。 C ++中非常简单的例子:

Manager::createEverything()
{
    Connection connection;
    Protocol protocol;
    Communication communication;
    HAL hal;

    communication.setHal(hal);
    protocol.setCommunication(communication);
    connection.setProtocol(protocol);
}

您也可以使用依赖注入来创建不同的HAL - 实现方式。课程设计可能如下所示:

以上内容非常简单,但应该给你一个想法。更多的想法: