设计模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。
23种设计模式分为创建型、结构型和行为型3大类。
软件设计方面,对象的创建和使用分开成了必然趋势。
对象的创建会消耗掉系统的很多资源,单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。
5个具体的设计模式,它们分别是:
1. 工厂方法模式[Factory Method]
2. 抽象工厂模式[Abstract Factory]
3.创建者模式[Builder]
4.单例模式[Singleton]
5.原型模式[Prototype]
保证一个类只有一个实例,并且提供一个全局访问点
场景:
1. 需要更严格地控制全局变量时,使用单例模式(统计类、限流)。
2. 重量级的对象如线程池对象,数据库连接池对象/不需要多个实例的对象如工具类。
class A{
private:
A(){
a = new A;
}
public:
static A* getInstance()
{
return a;
}
private:
static A* a;
};
int main(void){
A::getInstance();
return 0;
}
# 实现单例步骤
1. 构造函数私有化
2. 增加静态私有化 当前类的指针变量
3. 提供静态对外接口,可以让用户获得单例对象
单例分为懒汉式 饿汉式
//懒汉式
class Singleton_lazy{
private:
Singleton_lazy(){}
static Singleton_lazy* getInstance(){
if (pSingleton == NULL){
pSingleton = new Singleton_lazy;
}
return pSingleton;
}
private:
static Singleton_lazy* pSingleton;
};
静态属性,类外初始化
Singleton_lazy* Singleton_lazy::pSingleton = NULL;
// 饿汉式
class Singleton_hungry{
private:
Singleton_hungry(){
cout<<"饿汉构造"
}
static Singleton_hungry* getInstance(){
return pSingleton;
}
private:
static Singleton_hungry* pSingleton;
};
Singleton_hungry* Singleton_hungry::pSingleton = new Singleton_hungry;
析构:
class Garbo{
Garbo(){
if(pSingleton != NULL){
delete pSingleton;
}
}
}