#pragma once #include "IMechnicalComponentFactory.h" namespace DIOS::Dev::Detail::MachineryECOM { class MechnicalComponentFactory : public IMechnicalComponentFactory { public: MechnicalComponentFactory(); ~MechnicalComponentFactory(); public: static IMechnicalComponentFactory *Instance(); public: virtual IComponentController *CreateController(COMPONENT_CONTROLLER_TYPE type, const std::string &name) override; private: IComponentController *CreateDetectorHeightController(const std::string &name); IComponentController *CreateTubeAngleController(const std::string &name); IComponentController *CreateTubeHeightController(const std::string &name); IComponentController *CreateSensorADController(const std::string &name); IComponentController *CreateSensorEncoderController(const std::string &name); IComponentController *CreateExposureController(const std::string &name); IComponentController *CreateLandmarkController(const std::string &name); IComponentController *CreateCollimatorController(const std::string &name); IComponentController *CreateCArmTubeCircularController(const std::string &name); IComponentController *CreateCArmTubeSwingController(const std::string &name); IComponentController *CreateFluoroSwitchController(const std::string& name); IComponentController* CreateTubeLineSwitchController(const std::string& name); IComponentController* CreateTubeHorizontalController(const std::string& name); private: std::map m_detectorHeightControllers; std::map m_tubeAngleControllers; std::map m_tubeHeightControllers; std::map m_sensorADControllers; std::map m_sensorEncoderControllers; std::map m_exposureControllers; std::map m_landmarkControllers; std::map m_collimatorControllers; std::map m_tubeCircularControllers; std::map m_tubeSwingControllers; std::map m_fluoroSwitchControllers; std::map m_tubeLineSwitchControllers; std::map m_tubeHorizontalControllers; static MechnicalComponentFactory *m_instance; }; }