C++ 设计模式——单例模式

⼀个类只能创建⼀个对象,即单例模式,该设计模式可以保证系统中该类只有⼀个实例,并提供⼀个 访问它的全局访问点,该实例被所有程序模块共享。⽐如在某个服务器程序中,该服务器的配置信息 存放在⼀个文件中,这些配置数据由⼀个单例对象统⼀读取,然后服务进程中的其他对象再通过这个 单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。

单例模式有两种实现模式:饿汉模式和懒汉模式

一、饿汉模式

        饿汉模式:程序启动时就会创建⼀个唯⼀的实例对象。因为单例对象已经确定,所以⽐较适用于多线程环境中,多线程获取单例对象不需要加锁,可以有效的避免资源竞争,提高性能。

//饿汉模式(以空间换时间)
#include <iostream>
class singleton{
private:
    singleton()
    :_data(129)
    {
        std::cout << "单例对象实例化成功!" << std::endl;
    }

    singleton(const singleton&) = delete;

    ~singleton(){}

private:
    static singleton _eton;
    int _data;

public:
    static singleton& getsingleton()
    {
        return _eton;
    }

    int getdata()
    {
        
        return _data;
    }
};

singleton singleton::_eton;

int main()
{
    std::cout << singleton::getsingleton().getdata() << std::endl;
    return 0;
}

二、懒汉模式

懒汉模式:第⼀次使⽤要使⽤单例对象的时候创建实例对象。如果单例对象构造特别耗时或者耗费济 源(加载插件、加载网络资源等),可以选择懒汉模式,在第⼀次使⽤的时候才创建对象。

这里应用C++11的特性,实现一个简单的懒汉单例模式。

#include <iostream>
//懒汉模式

class Singleton{
private:
    int _data;
private:
    Singleton()
    :_data(625)
    {
        std::cout << "懒汉模式单例对象构造成功!" << std::endl;
    }

    Singleton(const Singleton& ) = delete;

    ~Singleton()
    {

    }

public:
    static Singleton& GetInStance()
    {
        static Singleton _eton;
        return _eton;
    }

    int GetData()
    {
        return _data;
    }
    
};


int main()
{
    std::cout << Singleton::GetInStance().GetData() << std::endl;
    return 0;
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值