task_command_manager.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * task_command_manager 是任务单的总管理,单例模式
  3. * 负责管理任务单的派送和转发
  4. * 所有的任务发送方都只需要调用 task_command_manager.get_instance_references().execute_task(p_task_base)
  5. * 然后task_command_manager去找到对应的接受对象,来调用该对象的接口函数。 例如Laser_base::execute_task
  6. * 这样发送方和接收方不直接绑定,双方完全独立。
  7. * 没有在实例里面保存对方的回调函数或者对象指针
  8. *
  9. * */
  10. #ifndef TASK_COMAND_MANAGER_H
  11. #define TASK_COMAND_MANAGER_H
  12. #include <string>
  13. #include "../error_code/error_code.h"
  14. #include "../task/task_base.h"
  15. #include "../tool/singleton.h"
  16. class Task_command_manager:public Singleton<Task_command_manager>
  17. {
  18. // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
  19. friend class Singleton<Task_command_manager>;
  20. public:
  21. // 必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
  22. Task_command_manager(const Task_command_manager&)=delete;
  23. Task_command_manager& operator =(const Task_command_manager&)= delete;
  24. ~Task_command_manager()=default;
  25. private:
  26. // 父类的构造函数必须保护,子类的构造函数必须私有。
  27. Task_command_manager()=default;
  28. public:
  29. //对外的接口函数,所有的任务发送方,都必须使用该函数。
  30. //execute_task在内部解析了Task_Base里面的Task_type,然后转发给具体某个模块的实例对象。
  31. //input:p_task_base 任务单,基类的指针,指向子类的实例,(多态)
  32. Error_manager execute_task(Task_Base* p_task_base);
  33. };
  34. #endif //TASK_COMAND_MANAGER_H