#include "workerfactory.h" #include Worker::Worker() : QObject(nullptr), m_bCancel(false) {} Worker::~Worker() {} // /** * @brief 环境检测 */ void Worker::checkEnv() { checkEnvEx(); } /** * @brief 任务处理 */ void Worker::doWork() { doWorkEx(); } // 环境检测,个性化部分派生类去实现 bool Worker::checkEnvEx() { return true; } // 任务处理,个性化部分派生类去实现 void Worker::doWorkEx() {} // 任务取消,个性化部分派生类去实现 void Worker::cancelEx() {} /** * @brief 根据操作类型和位置创建相应的处理类 * @param type 操作类型,如:系统备份, 系统还原 * @param position 本地备份还是U盘备份: 0-本地备份;1-移动设备备份 * @return Worker派生类对象指针,需调用者释放此对象 */ Worker * WorkerFactory::createWorker(int type, int position) { QString className; switch (type) { case BackupType::BACKUP_SYSTEM: case BackupType::INC_BACKUP_SYSTEM: if (BackupPosition::UDISK == position) { className = "UDiskSystemBackupProxy"; } else if (BackupPosition::CUSTOMIZE == position) { className = "CustomizeSystemBackupProxy"; } else { className = "SystemBackupProxy"; } break; case BackupType::RESTORE_SYSTEM: case BackupType::RESTORE_SYSTEM_WITH_DATA: if (BackupPosition::UDISK == position || BackupPosition::OTHER == position) { className = "UDiskSystemRestoreProxy"; } else if (BackupPosition::CUSTOMIZE == position) { className = "CustomizeSystemRestoreProxy"; } else { className = "SystemRestoreProxy"; } break; case BackupType::BACKUP_DATA: case BackupType::INC_BACKUP_DATA: if (BackupPosition::UDISK == position) { className = "UDiskDataBackupProxy"; } else if (BackupPosition::CUSTOMIZE == position) { className = "CustomizeDataBackupProxy"; } else { className = "DataBackupProxy"; } break; case BackupType::RESTORE_DATA: if (BackupPosition::UDISK == position) { className = "UDiskDataRestoreProxy"; } else { className = "DataRestoreProxy"; } break; case BackupType::DELETE_BACKUP: className = "DeleteBackupProxy"; break; case BackupType::GHOST_IMAGE: if (BackupPosition::UDISK == position) { className = "UDiskGhostImageProxy"; } else if (BackupPosition::CUSTOMIZE == position) { className = "CustomizeGhostImageProxy"; } else { className = "GhostImageProxy"; } break; default: break; } if (className.isEmpty()) { return nullptr; } Worker * p = qobject_cast(Reflect::createObject(className)); return p; }