问题:
我有完全独立的软件管理器(软件实体),例如 CCarManager、CTruckManager 等。有时我正在创建新对象,例如 CCar。CCar 必须与各种不同的管理器有关系,例如,与 CResourceManager、CTruckManager。将 CCar 与这些经理联系起来的最佳方式是什么?
解决方案:
有全局软件管理器(头文件中的单例或外部)[不喜欢全局]
使用一个全局点并将其传递给其他对象,例如 CCar(CApplication)、CApplication->TrukManager()、CApplication->CarManager()... [看起来不太好,但可以传递一个指针]
传递给 CCar(CCarManager *pCarManager, CTruckManager *pTruckManager....) [难以扩展]
使用观察者模式,例如 CCar.Attach(CCarManager), CCar.Attach(CTruckManager); [易于扩展,但主要关注处理方法调用,哪些部分负责什么等,还有很多检查]
工厂。
类 CCarFactory(CCarManager *pMngr) { CCar *CreateCar() { return CCar(m_pCarManager); } }
还有什么其他方法?