文章目录
- 0 代码仓库
- 1 单例模式是什么?
- 2 日志模块
-
- 2.1 日志模块的头文件
- 2.2 日志模块的实现cpp
0 代码仓库
https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Preparation/06.C%20Sosket%20API%E5%B0%81%E8%A3%85%E6%88%90C%2B%2B%E7%B1%BB/2服务器托管网.%E5%B0%81%E8%A3%85%E6%88%90C%2B%2B%E7%B1%BB/connectPool/connectPool
1 单例模式是什么?
单例模式是一种创建型的软件设计模式,在工程项目中非常常见。通过单例模式的设计,使得创建的类在当前进程中只有一个实例,并提供一个全局性的访问点,这样可以规避因频繁创建对象而导致的内存飙升情况。
-
实现单例模式的三个要点:
(1)私有化构造函数:这样外界就无法自由地创建类对象,进而阻服务器托管网止了多个实例的产生。
(2)类定义中含有该类的唯一静态私有对象:静态变量存放在全局存储区,且是唯一的,供所有对象使用。
(3)用公有的静态函数来获取该实例:提供了访问接口。 -
单例模式一般分为
懒汉式
和饿汉式
。
(1)懒汉式:在使用类对象(单例实例)时才会去创建它,不然就懒得去搞。
(2)饿汉式:单例实例在类装载时构建,有可能全局都没使用过,但它占用了空间,就像等着发救济粮的饿汉提前排好队等吃的一样。
2 日志模块
- 采取了饿汉单例模式:
-将构造函数声明为私有;
-并将Logger的一个类实例作为全局的成员变量保存,提供一个static方法获取该实例。
2.1 日志模块的头文件
#pragma once
#include
#include
// 饿汉模式单例类
class Logger
{
public:
enum Type { CONSOLE, FILE };
enum Level { DEBUG, INFO, WARNING, ERROR, CRITICAL };
static Logger* getInstance();
void Log(std::string text, std::string file, int line, Level level = INFO);
void setEnableLevel(Level level);
inline void setDevice(Type device)
{
m_device = device;
}
~Logger();
private:
Logger();
Logger(const Logger& log);
private:
std::ofstream m_writer;
static Logger m_log;
Level m_level = INFO;
Type m_device = CONSOLE;
};
2.2 日志模块的实现cpp
#include "Logger.h"
#include
Logger Logger::m_log;
Logger::Logger()
{
m_writer.open("logger.log");
}
Logger * Logger::getInstance()
{
return &m_log;
}
void Logger::Log(std::string text, std::string file, int line, Level level)
{
bool flag = level >= m_level;
if (flag)
{
if (m_device == CONSOLE)
{
// 日志信息控制台输出
std::cout "File[ " file " ], Line[ " line
" ], Infomation[ " text " ]" std::endl;
}
else
{
// 日志信息写文件
m_writer "File[ " file " ], Line[ " line
" ], Infomation[ " text " ]" std::endl;
// 数据强制刷到磁盘
m_writer.flush();
}
}
}
void Logger::setEnableLevel(Level level)
{
m_level = level;
}
Logger::~Logger()
{
m_writer.close();
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
这个是自己随便写的,类似于笔记 vim 多模式编辑器 查看指令: gg: 定位光标到最开始行 shift+(按)g 定位到最结尾行 n+shift+(按)g 服务器托管网定位到任意行 shift+$ 定位到本行结尾 0 定位到本行开头 w:跨单词移动 h.j.…