设计模式----单例模式(c++实现)

/***********************************************************
单例模式:
思想:保证在程序运行时,只有一个实例化的对象
1.懒汉式
    1.只有在使用的时候才去实例化对象,在用不到的时候不去创建
    2.首先构造函数私有化,通过静态成员函数赋予外界调用的权限
    静态成员变量在类内定义,在类外初始化
    3.通过静态成员指针变量来判断对象是否创建
2.饿汉式
    1.与懒汉式的区别是,静态成员变量在初始化时,就将对象创建出来
    2.通过静态成员函数获得此对象,在获得该实例时,直接返回此对象
**********************************************************/
/*********************************************************
1.单例模式-----懒汉式
**********************************************************/
#include <iostream>
using namespace std;
class Singelton//懒汉式
{
private:
    Singelton(){
        cout << "单例对象:构造函数" << endl;
    }
public:
    static Singelton *getInstance()
    {
        if (m_singer == NULL)
        {
            m_singer = new Singelton;
        }
        return m_singer;
    }
private:
    static Singelton *m_singer;
};
Singelton *Singelton::m_singer = NULL;//懒汉式 并没有创建单例对象
void main()
{
    cout << "演示 懒汉式" << endl;
    Singelton *p1 = Singelton::getInstance();
    Singelton *p2 = Singelton::getInstance();
    if (p1 != p2)
    {
        cout << "不是同一个对象" << endl;
    }
    else
    {
        cout << "是同一个对象" << endl;
    }
    system("pause");
}
/*********************************************************
2.单例模式-----饿汉式
**********************************************************/
class Singelton2
{
private:
    Singelton2()
    {
        m_singer = NULL;
        cout << "俄汉式:构造函数" << endl;
    }
public:
    static Singelton2 *getInstance()
    {
        return m_singer;
    }
private:
    static Singelton2 *m_singer;
};
Singelton2 *Singelton2::m_singer = new Singelton2();//饿汉式 在初始化时,直接创建该对象
void main()
{
    cout << "演示 饿汉式" << endl;
    Singelton2 *p1 = Singelton2::getInstance(); 
    Singelton2 *p2 = Singelton2::getInstance();
    if (p1 != p2)
    {
        cout << "不是同一个对象" << endl;
    }
    else
    {
        cout << "是同一个对象" << endl;
    }
    system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值