设计模式之单例模式、工厂模式、发布订阅模式以及观察者模式

本文深入探讨了设计模式中的单例模式、工厂模式和发布订阅模式。单例模式确保类只有一个实例,常用于DBPool和配置文件管理。工厂模式则通过接口延迟对象实例化,提高系统灵活性。发布订阅模式与观察者模式虽有关联,但不完全相同,其在消息通知场景中广泛应用。每种模式都提供了相关示例以帮助理解。
摘要由CSDN通过智能技术生成

单例模式

    保证一个类仅有一个实例,并提供一个该实例的全局访问点

    在软件系统中,经常有这样一些特殊的类,必须保证他们 在系统中只存在一个实例,才能确保它们的逻辑正确性, 以及良好的效率

应用场景:

       DBPool 、读取配置文件

单例模式分类:

      1、懒汉式  --  需要使用单例的时候,才进行初始化

      2、饿汉式  --  未调用单例的时候,已经进行初始化

 

写一个单例模式的demo

#include <iostream>
#include <mutex>
#include <thread>

using namespace std;

//设计线程的个数
#define PTHREAD_NUM  20
//懒汉式 饿汉式 单例模式的选型
#define SINGELTON_SELECTOR 0

//单例模式

#if SINGELTON_SELECTOR

//懒汉式  -- 调用的时候才初始化
class Singleton{

private:
	Singleton(){
		cout<<"Singleton construct  1111\n";
	}
	~Singleton(){
		cout<<"Singleton destruct   1111\n";
	}

	//禁止拷贝构造
	Singleton(const Singleton &si) = delete;
	//禁止等号赋值
	Singleton & operator=(const Singleton &si) = delete;

public:
	static Singleton * getInstance(){
		static Singleton m_singleton;
		return &m_singleton;
	}
};

#else

//饿汉式 -- 调用之前就已经初始化好,调用的时候直接返回地址
class Singleton{

private:
	Singleton(){
		cout<<"Singleton construct   2222\n";
	}
	~Singleton(){
		cout<<"Singleton destruct    2222\n";
	}

	//禁止拷贝构造
	Singleton(const Singleton &si) = delete;
	//禁止等号赋值
	Singleton & operator=(const Singleton &si) = delete;
	static Singleton m_singleton;
	
public:
	static Singleton * getInstance(){
		return &m_singleton;
	}
};

Singleton Singleton::m_singleton;


#endif 

//定义一个互斥锁,保证只有一个线程在打印 单例变量的地址
static mutex m;
void print_address()
{
	Singleton* singleton = Singleton::getInstance();

	m.lock();
	cout<<singleton<<en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值