引言:
编写一个与具体业务无关的示例代码。这个示例代码主要体现以下几个设计思想和模式:
接口模式(Interface Pattern):定义接口类,并让具体实现类去实现该接口的功能。
工厂模式(Factory Pattern):根据不同条件动态生成不同的对象实例。
模板方法模式(Template Method Pattern):父类定义方法的结构,子类实现具体逻辑。
多线程处理:创建子类继承自
QThread
,并实现线程中的具体逻辑。
示例代码设计:
核心逻辑:一个简单的日志系统,根据日志等级(如"info"、"warning"、"error")动态生成不同的日志处理线程,并执行相应的日志输出。
工厂模式:工厂方法根据日志类型生成不同的处理线程。
模板方法模式:每个日志处理线程继承自基类,基类定义通用处理逻辑,子类实现具体日志输出。
示例代码
1. 日志处理接口定义
cpp复制代码#ifndef LOGHELPERINTERFACE_H #define LOGHELPERINTERFACE_H #include <QString> #include <QVector> class LogHelperInterface { public: virtual ~LogHelperInterface() {} // 记录日志 virtual void logMessage(const QString& message) = 0; }; #endif // LOGHELPERINTERFACE_H
2. 基础日志引擎类
cpp复制代码#ifndef LOGENGINE_H #define LOGENGINE_H #include <QMap> #include <QThread> #include "loghelperinterface.h" class LogEngine : public QObject { Q_OBJECT public: LogEngine(int logID, LogHelperInterface* helper); ~LogEngine(); void logMessage(const QString& message); static LogEngine* getEngine(const int& logID); private: static QMap<int, LogEngine*> m_logMap; // 用于存储不同日志引擎实例 int m_logID; LogHelperInterface* m_pHelper; }; #endif // LOGENGINE_H
3. 基础日志处理线程类
cpp复制代码#ifndef LOGTHREADBASE_H #define LOGTHREADBASE_H #include <QThread> #include "loghelperinterface.h" class LogThreadBase : public QThread { Q_OBJECT public: explicit LogThreadBase(LogHelperInterface* helper, QObject* parent = nullptr); static LogThreadBase* createLogHandler(const QString& logType, LogHelperInterface* helper); virtual void handleLog(const QString& message) = 0; protected: LogHelperInterface* m_logHelper; }; #endif // LOGTHREADBASE_H
4. 工厂模式实现
cpp复制代码#include "logthreadbase.h" #include "infologthread.h" #include "warninglogthread.h" #include "errorlogthread.h" LogThreadBase* LogThreadBase::createLogHandler(const QString& logType, LogHelperInterface* helper) { if (logType == "info") { return new InfoLogThread(helper); } else if (logType == "warning") { return new WarningLogThread(helper); } else if (logType == "error") { return new ErrorLogThread(helper); } return nullptr; }
5. 基础日志处理线程类实现
cpp复制代码#include "logthreadbase.h" LogThreadBase::LogThreadBase(LogHelperInterface* helper, QObject* parent) : QThread(parent), m_logHelper(helper) { }
6. InfoLogThread 具体实现
cpp复制代码#ifndef INFOLOGTHREAD_H #define INFOLOGTHREAD_H #include "logthreadbase.h" class InfoLogThread : public LogThreadBase { Q_OBJECT public: explicit InfoLogThread(LogHelperInterface* helper, QObject* parent = nullptr); void handleLog(const QString& message) override; }; #endif // INFOLOGTHREAD_H cpp复制代码#include "infologthread.h" #include <QDebug> InfoLogThread::InfoLogThread(LogHelperInterface* helper, QObject* parent) : LogThreadBase(helper, parent) { } void InfoLogThread::handleLog(const QString& message) { qDebug() << "INFO: " << message; m_logHelper->logMessage("INFO: " + message); }
7. WarningLogThread 具体实现
cpp复制代码#ifndef WARNINGLOGTHREAD_H #define WARNINGLOGTHREAD_H #include "logthreadbase.h" class WarningLogThread : public LogThreadBase { Q_OBJECT public: explicit WarningLogThread(LogHelperInterface* helper, QObject* parent = nullptr); void handleLog(const QString& message) override; }; #endif // WARNINGLOGTHREAD_H cpp复制代码#include "warninglogthread.h" #include <QDebug> WarningLogThread::WarningLogThread(LogHelperInterface* helper, QObject* parent) : LogThreadBase(helper, parent) { } void WarningLogThread::handleLog(const QString& message) { qDebug() << "WARNING: " << message; m_logHelper->logMessage("WARNING: " + message); }
8. ErrorLogThread 具体实现
cpp复制代码#ifndef ERRORLOGTHREAD_H #define ERRORLOGTHREAD_H #include "logthreadbase.h" class ErrorLogThread : public LogThreadBase { Q_OBJECT public: explicit ErrorLogThread(LogHelperInterface* helper, QObject* parent = nullptr); void handleLog(const QString& message) override; }; #endif // ERRORLOGTHREAD_H cpp复制代码#include "errorlogthread.h" #include <QDebug> ErrorLogThread::ErrorLogThread(LogHelperInterface* helper, QObject* parent) : LogThreadBase(helper, parent) { } void ErrorLogThread::handleLog(const QString& message) { qDebug() << "ERROR: " << message; m_logHelper->logMessage("ERROR: " + message); }
9. 日志记录实现类
cpp复制代码#ifndef SIMPLELOGHELPER_H #define SIMPLELOGHELPER_H #include "loghelperinterface.h" #include <QDebug> class SimpleLogHelper : public LogHelperInterface { public: void logMessage(const QString& message) override { // 这里我们简单将日志输出到控制台 qDebug() << "Logging message: " << message; } }; #endif // SIMPLELOGHELPER_H
10. 主函数示例
cpp复制代码#include <QCoreApplication> #include "logengine.h" #include "simpleloghelper.h" #include "logthreadbase.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); SimpleLogHelper logHelper; // 创建日志引擎 LogEngine* logEngine = new LogEngine(1, &logHelper); // 生成不同的日志处理线程 LogThreadBase* infoLogThread = LogThreadBase::createLogHandler("info", &logHelper); LogThreadBase* warningLogThread = LogThreadBase::createLogHandler("warning", &logHelper); LogThreadBase* errorLogThread = LogThreadBase::createLogHandler("error", &logHelper); // 处理日志 infoLogThread->handleLog("This is an info message"); warningLogThread->handleLog("This is a warning message"); errorLogThread->handleLog("This is an error message"); return a.exec(); }
总结
接口模式:
LogHelperInterface
是接口,SimpleLogHelper
实现了这个接口,用于处理日志输出。工厂模式:
LogThreadBase::createLogHandler
工厂方法根据传入的日志类型动态生成不同的日志处理线程(如InfoLogThread
,WarningLogThread
,ErrorLogThread
)。模板方法模式:
LogThreadBase
作为抽象基类,定义了日志处理的通用接口,具体实现由子类完成。
通过这个示例,展示了如何使用这些设计模式来构建一个灵活、可扩展的系统。