我正在构建一个C++应用程序,并且我有几个实用程序对象,我的所有类都需要使用它们.这些是日志记录对象,全局状态对象,DAL对象等...
到目前为止,我已经将所有这些对象作为引用传递给我的类构造函数.
例如:
class Honda : public Car
{
public:
Honda ( const GlobalState & state,
const Log & logger,
const DAL & dal );
...
private:
const GlobalState & my_state;
const Log & my_logger;
const DAL & my_dal;
}
这很快就会变得乏味,因为每次我添加一个我所有类都需要访问的实用程序对象时,我都必须在各处更改构造函数.
我听说解决这个问题的正确方法是创建一个包含所有不同实用程序对象的结构,并将其传递给所有需要访问它的对象(作为参考).
这是处理这个问题的正确方法吗?谢谢!
更新:感谢大家的反馈.经过一些额外的研究,我决定继续使用依赖注入.
vla*_*adr 11
您可以使您的GlobalState,Log,DAL类单例:
class GlobalState {
public:
static GlobalState& getInstance();
protected:
GlobalState();
GlobalState(const GlobalState&);
GlobalState& operator= (const GlobalState&);
private:
static GlobalState* p_instance;
};
static GlobalState* GlobalState::p_instance = NULL;
/*static*/
GlobalState& getInstance() {
// TODO: acquire lock if multi-threaded
if (!p_instance) { // first time?
p_instance = new GlobalState(); // create sole instance
}
// TODO: release lock if multi-threaded
return *p_instance; // sole instance
}
Run Code Online (Sandbox Code Playgroud)
然后,在你的各种方法里面,
Honda::MyMethod() {
...
const GlobalState& my_state = GlobalState::getInstance();
...
}
Run Code Online (Sandbox Code Playgroud)
通过在特定条件下定义单例C++模板(例如,所有类的构造函数采用相同数量和类型的参数等),您可以进一步简化您的生活(并减少代码重复的数量).
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |