码迷,mamicode.com
首页 > 其他好文 > 详细

创建型模式 单例模式

时间:2017-11-02 20:12:31      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:饿汉式   http   存在   blog   懒汉   使用   构造函数   void   code   

创建型模式 单例模式

 

/**
 * 创建型模式 单例模式 懒汉式
 * GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。
 *
 * 实现单例步骤常用步骤
 * a) 构造函数私有化
 * b) 提供一个全局的静态方法(全局访问点)
 * c) 在类中定义一个静态指针,指向本类的变量的静态变量指针
 *
 */

#include <iostream>

class Singelton
{
private:
    static Singelton * m_pls;

    Singelton() // 构造函数不是线程安全函数
    {
        std::cout << "Singelton 构造函数执行" << std::endl;
    }
public:
    static Singelton *getInstance()
    {
        if (m_pls == nullptr) // 只有在使用的时候,才去创建对象。 1 每次获取实例都要判断 2 多线程会有问题 
        {
            m_pls = new Singelton;
        }
        return m_pls;
    }

    static Singelton *FreeInstance()
    {
        if (m_pls != nullptr)
        {
            delete m_pls;
            m_pls = nullptr;
        }
        return m_pls;
    }
};

Singelton * Singelton::m_pls = nullptr;


void mytest()
{
    Singelton * p1 = Singelton::getInstance();
    Singelton * p2 = Singelton::getInstance();
    if (p1 == p2)
    {
        std::cout << "是同一个对象" << std::endl;
    }
    else
    {
        std::cout << "不是同一个对象" << std::endl;
    }
    Singelton::FreeInstance();

    return;
}


int main()
{
    mytest();

    system("pause");
    return 0;
}

 

 

/**
 * 创建型模式 单例模式 饿汉式
 * GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。
 *
 * 实现单例步骤常用步骤
 * a) 构造函数私有化
 * b) 提供一个全局的静态方法(全局访问点)
 * c) 在类中定义一个静态指针,指向本类的变量的静态变量指针
 *
 */

#include <iostream>

class Singelton
{
private:
    static Singelton * m_pls;

    Singelton() 
    {
        std::cout << "Singelton 构造函数执行" << std::endl;
    }
public:
    static Singelton *getInstance()
    {
        return m_pls;
    }

    static Singelton *FreeInstance()
    {
        if (m_pls != nullptr)
        {
            delete m_pls;
            m_pls = nullptr;
        }
        return m_pls;
    }
};

// 饿汉式
// 不管你创建不创建实例,均把实例new出来
Singelton * Singelton::m_pls = new Singelton;


void mytest()
{
    Singelton * p1 = Singelton::getInstance();
    Singelton * p2 = Singelton::getInstance();
    if (p1 == p2)
    {
        std::cout << "是同一个对象" << std::endl;
    }
    else
    {
        std::cout << "不是同一个对象" << std::endl;
    }
    Singelton::FreeInstance();

    return;
}


int main()
{
    mytest();

    system("pause");
    return 0;
}

 

技术分享

 

创建型模式 单例模式

标签:饿汉式   http   存在   blog   懒汉   使用   构造函数   void   code   

原文地址:http://www.cnblogs.com/lsgxeva/p/7773741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!