日志文件系统
编写一个与具体业务无关的示例代码。这个示例代码主要体现以下几个设计思想和模式:
- 接口模式(Interface Pattern):定义接口类,并让具体实现类去实现该接口的功能。
- 工厂模式(Factory Pattern):根据不同条件动态生成不同的对象实例。
- 模板方法模式(Template Method Pattern):父类定义方法的结构,子类实现具体逻辑。
- 多线程处理:创建子类继承自
QThread
,并实现线程中的具体逻辑。
示例代码设计:
- 核心逻辑:一个简单的日志系统,根据日志等级(如"info"、“warning”、“error”)动态生成不同的日志处理线程,并执行相应的日志输出。
- 工厂模式:工厂方法根据日志类型生成不同的处理线程。
- 模板方法模式:每个日志处理线程继承自基类,基类定义通用处理逻辑,子类实现具体日志输出。
示例代码
1. 日志处理接口定义
#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. 基础日志引擎类
#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. 基础日志处理线程类
#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. 工厂模式实现
#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. 基础日志处理线程类实现
#include "logthreadbase.h"
LogThreadBase::LogThreadBase(LogHelperInterface* helper, QObject* parent)
: QThread(parent), m_logHelper(helper)
{
}
6. InfoLogThread 具体实现
#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
#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 具体实现
#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
#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 具体实现
#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
#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. 日志记录实现类
#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. 主函数示例
#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
作为抽象基类,定义了日志处理的通用接口,具体实现由子类完成。
通过这个示例,展示了如何使用这些设计模式来构建一个灵活、可扩展的系统。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 接口模式、工厂模式、模板方法模式的日志文件系统
发表评论 取消回复