当前位置:首页 > 公众号精选 > 21ic电子网
[导读]单例模式看起来简单,但是需要考虑的问题却很多。保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》在软件系统中,经常有这样一些特殊的类,必须保证他们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。所以得考虑如何绕过常规的构造器(不允许使用者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
21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭