• c++设计模式:单例模式


    单例模式

    单例模式属于创建类型的一种常用的软件设计模式,通过单例模式的方法创建的类在当前进程中只有一个实例

    应用场景

    配置管理
    日志记录
    线程池
    连接池
    内存池
    对象池
    消息队列

    实现步骤

    1.将类的构造方法定义为私有方法(为了只实例化一个单例);
    2.定义一个私有的类的静态实例;
    3.提供一个公有的获取实例的静态方法。

    涉及知识点

    1.static 静态成员数据
    2.static 静态成员函数
    3.template模板类
    4.friend友元类

    设计与实现

    常用实现
    #pragma once
    #include 
    
    
    class A
    {
    
    public:
    	//通过该方法创建实例
    	static A* instance()
    	{
    		//如果没有创建过类对象,则创建一个实例
    		if (m_instance == NULL)
    		{
    			m_instance = new A(); 
    		}
    		return m_instance;
    	}
    	void show()
    	{
    		std::cout << m_name << std::endl;
    	}
    	//1.将类的构造方法和析构都定义为私有的
    private:
    	A() :m_name("A") {}
    	A(const A&) {}
    	~A() {}
    	A & operator = (const A &);
    private:
    	//定义静态的类数据
    	static A*  m_instance;
    	string m_name;
    };
    A* A::m_instance = NULL;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    模板实现
    #pragma once
    #include 
    
    template <typename T>
    class Singleton
    {
    
    public:
    	//通过该方法创建实例
    	static T* instance()
    	{
    		//如果没有创建过类对象,则创建一个实例
    		if (m_instance == NULL)
    		{
    			m_instance = new T();
    		}
    		return m_instance;
    	}
    	void show()
    	{
    		std::cout << m_name << std::endl;
    	}
    	//1.将类的构造方法和析构都定义为私有的
    private:
    	Singleton() {}
    	Singleton(const Singleton<T>&);
    	~Singleton() {}
    	Singleton<T>& operator = (const Sinleton<T>);
    private:
    	//定义静态的类数据
    	static T*  m_instance;
    	string m_name;
    };
    template <typename T>
    T* Singleton<T>::m_instance = NULL;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    WEB安全之HTML基础
    前端框架-echarts
    Java中的错误和异常
    Docker 网络学习
    《面向分布式云的直播及点播云技术创新方案》获中国信通院“分布式云技术创新先锋案例”
    Django的设计模式及模板层
    精灵图练习---pink老师课程
    Java开发学习---Spring事务属性、事务传播行为
    搭建一个自己的学术语音助手(1)
    Spring Cloud超越微服务:服务网格的崭露头角
  • 原文地址:https://blog.csdn.net/weixin_42097108/article/details/133471756