单例模式( Singleton)——创建型模式

单例模式——创建型模式

什么是单例模式?

单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。简单来说如果你创建了一个对象, 过一会儿后你决定再创建一个新对象, 此时你会获得之前已创建的对象, 而不是一个新对象。

单例模式的使用场景:

开发工具类库中的很多工具类都应用了单例模式,比例线程池、缓存、日志对象等,它们都只需要创建一个对象

单例模式的实现思路:

  • 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符。
  • 新建一个静态构建方法作为构造函数。 该函数会 “偷偷” 调用私有构造函数来创建对象, 并将其保存在一个静态成员变量中。 此后所有对于该函数的调用都将返回这一缓存对象。

单例模式的写法:

写法有十几种,这里介绍一下懒汉和饿汉 ↓

懒汉模式

  • "懒汉"是指对象在被需要时才会创建,就像懒惰的人一样,只有在需要时才会去做事情。因此,懒汉模式延迟了对象的创建时机,直到第一次使用时才会创建实例

饿汉模式

  • "饿汉"是指对象在类加载时就已经被创建,就像饿着肚子的人一样,对事情都很急迫,因此在类加载阶段就立即创建实例。这样无论是否需要,对象都会被创建。

懒汉模式C++实现样例:

在这里插入图片描述

/*************************************************************************
        > File Name: 6.Singleton.cpp
        > Author:
        > Mail:
        > Created Time: Mon Mar 11 17:41:51 2024
 ************************************************************************/

#include <iostream>
#include <mutex>

using namespace std;

class Database {
private:
    Database() {
        // The logic of init Database.
    }
    static Database *instance;
    static mutex mtx;
public:
    static Database* getInstance();
    void query();
};

Database* Database::instance = nullptr;
mutex Database::mtx;

Database* Database::getInstance() {
    if (instance)  return instance;
    lock_guard<mutex> lock(mtx);
    if (!instance)  instance = new Database();
    return instance;
}

void Database::query() {
    cout << "query success !!!  " << instance << endl;
    return ;
}

void CodeClient() {
    Database *p1 = Database::getInstance();
    p1->query();
    Database *p2 = Database::getInstance();
    p2->query();
}

int main() {
    CodeClient();
    return 0;
}
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值