c++设计模式学习(1)--------单例模式

设计模式基本原则:

1)开放封闭原则:对扩展代码开放,对修改代码封闭。
2)依赖倒置原则:依赖于抽象接口,不依赖与具体类。针对接口(抽象类)编程。
3)迪米特法则:一个对象应当尽可能少的了解另一个对象,从而降低各个对象之间的耦合性。
4)优先使用组合而不是继承原则。如果使用继承,那么父类的任何变化都会影响到子类行为;使用组合关系可以减低这种依赖关系。

单例模式

什么是单例模式?

单例模式是一个创建型模式,保证一个类只生成一个实例对象,也就是说在整个程序空间中,只有一个实例对象,同时提供对该实例加以访问的全局方法。

为什么使用单例模式

举例:在多线程环境下,初始化一个socket资源,共享同一资源或操作同一对象。
大规模系统中,为了性能考虑,节省对象的创建时间。
共享资源

单例模式的创建步骤

1)构造函数私有化:这样就不能单纯的new出对象
2)提供一个全局的访问方法:只可以通过该方法来获取单例对象
3)在类中提供一个静态指针:用来保存实例对象的内存地址。
4)私有化赋值构造函数,私有化复制操作符

懒汉模式

class SingleTon
{
public:
    static SingleTon * getInstance()
    {
        if(m_instance == NULL)//第一次检查是实例存在,那么就没有必要在进去判断是否要创建了,直接放回实例即可。
        {
            lock();
            if(m_instance == NULL)//第二次检查是为了防止多线程同步问题,即假如多个线程同时要都开始创建实例这种情况
            {

                m_instance = new SingleTon;
            }
            unlock();
        }
        return m_instance;
    }
private:
    SingleTon()
    {

    }
    ~SingleTon()
    {

    }
    SingleTon & operator=(SingleTon & si);
    SingleTon(SingleTon &);
private:
    static SingleTon * m_instance;
}

饿汉模式

class SingleTon
{
public:
    static SingleTon * getInstance()
    {
        return m_instance;
    }
private:
    SingleTon()
    {

    }

    SingleTon & operator=(SingleTon & si);
    SingleTon(SingleTon &);
private:
    static SingleTon * m_instance;
}
SingleTon * SingleTon::m_instance = new SingleTon;
//不管你需要不需要,在程序运行之前就把对象创建出来,这样也不要线程同步了。

总结单例模式

1、为什么需要单例模式
2、懒汉单例模式的线程同步问题
3、怎么阻止对象的复制赋值,以及对象的构造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值