创建型模式-单例模式
1 什么是单例模式
单例模式是一种创建型设计模式,它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式常用于需要唯一实例来协调任务的场景,比如线程池、日志记录器、缓存等。
2 举个例子
下面以一个简单的日志记录器为例来说明单例模式的应用。首先,我们定义一个日志记录器类 Logger,并将其构造函数和拷贝构造函数都设为私有,以防止外部代码直接创建对象实例。
class Logger {
public:
static Logger& getInstance() {
static Logger instance; // 静态局部变量确保仅被初始化一次
return instance;
}
void log(const string& message) {
cout << "Log: " << message << endl;
}
private:
Logger() {} // 私有构造函数
// 禁止拷贝构造和赋值操作
Logger(const Logger&) = delete;
Logger& operator=(const Logger&) = delete;
};
在上述示例中,Logger 类包含一个公有的静态方法 getInstance,用来获取该类的唯一实例。静态局部变量确保 Logger 类仅在第一次调用 getInstance 方法时被初始化,且保证了线程安全的初始化。同时,为了防止对象被复制,我们还删除了拷贝构造函数和赋值操作符。
在客户端代码中,我们可以通过 Logger::getInstance() 来获取日志记录器的实例,并调用实例的 log 方法来记录日志:
int main() {
Logger& logger = Logger::getInstance();
logger.log("This is a log message.");
return 0;
}
在上述示例中,通过调用 Logger::getInstance() 方法获取日志记录器的唯一实例,并调用实例的 log 方法来记录日志。无论客户端代码中有多少次调用 Logger::getInstance(),都将获得同一个 Logger 实例。
3 总结
单例模式的优点在于可控对象的数量,避免了无限制地创建相同的对象,同时提供了一个全局访问点来管理对象。然而,使用单例模式也可能引入全局状态,增加了对象之间的耦合,因此应该谨慎使用。
作者QQ:115124903,欢迎交流。
每一步踏出,都是一次探索,一次成长。
每一步踏出,都是一次探索,一次成长。