设计模式基本原则:
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、怎么阻止对象的复制赋值,以及对象的构造