gpt4 book ai didi

C++ 软件设计选项,类关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:25 25 4
gpt4 key购买 nike

问题:

我有完全独立的软件管理器(软件实体),例如 CCarManager、CTruckManager 等。有时我正在创建新对象,例如 CCar。 CCar 必须与各种不同的管理器有关系,例如,与 CResourceManager、CTruckManager。将 CCar 与这些经理联系起来的最佳方式是什么?

解决方案:

  1. 拥有全局软件管理器(头文件中的 Singleton 或 extern)[不喜欢全局变量]

  2. 使用一个全局点并将其传递给其他对象,例如 CCar(CApplication)、CApplication->TrukManager()、CApplication->CarManager()...[看起来不太好,但可以传一指]

  3. 传递给 CCar(CCarManager *pCarManager, CTruckManager *pTruckManager....)[难以扩展]

  4. 使用观察者模式,例如CCar.Attach(CCarManager), CCar.Attach(CTruckManager);[易于扩展,但主要关注处理方法调用,哪些部分负责什么等,还有很多检查]

  5. 工厂。

    类 CCarFactory(CCarManager *pMngr){ CCar *CreateCar() { 返回 CCar(m_pCarManager); }

还有哪些方法?

最佳答案

您可以在 CCar 的构造函数中传递对 CResourceManagerCTruckManager 等的引用。

CCar(const CResourceManager& resourceMgr, const CTruckManager& truckMgr):
_resourceMgr(resourceMgr), _truckMgr(truckMgr) {
//relevant construtor code here
}

这样也可以轻松地使用模拟实现进行测试。不知道“经理类的作用”就很难说。

恕我直言,名称以“Manager”结尾的类通常要么命名不当(我做过的次数多得数不过来),要么设计不当。

关于C++ 软件设计选项,类关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com