单例模式很简单?但你真能写对吗?
时间:2021-10-20 16:50:44
手机看文章
扫描二维码
随时随地手机看文章
[导读]单例模式看起来简单,但是需要考虑的问题却很多。保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。所以得考虑如何绕过常规的构造器(不允许使用者ne...

单例模式看起来简单,但是需要考虑的问题却很多。
保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。所以得考虑如何绕过常规的构造器(不允许使用者new出一个对象),提供一种机制来保证一个类只有一个实例。应用场景:
- Windows的Task Manager(任务管理器)就是很典型的单例模式,你不能同时打开两个任务管理器。Windows的回收站也是同理。
- 应用程序的日志应用,一般都可以用单例模式实现,只能有一个实例去操作文件。
- 读取配置文件,读取的配置项是公有的,一个地方读取了所有地方都能用,没有必要所有的地方都能读取一遍配置。
- 数据库连接池,多线程的线程池。
实现
单例模式的实现有很多中,我们来看看一些常见的实现。某些实现可能是适合部分场景,但并不是说不能用。实现一[线程不安全版本]
class Singleton{public:
static Singleton* getInstance(){
// 先检查对象是否存在
if (m_instance == nullptr) {
m_instance = new Singleton();
}
return m_instance;
}
private:
Singleton(); //私有构造函数,不允许使用者自己生成对象
Singleton(const Singleton