c++ 实现设计模式——单例(Singleton)模式
- 单例模式的特点
- 单例类只能有一个实例
- 单例类必须自己给自己创建唯一的实例
- 所有对象通过提供的一个staitc的接口instance来获得这个唯一的实例
- 单例模式使用场景举例
- 各种池的对象,比如进程池,线程池,数据库连接池,这些情况只能创建一个实例
- 工厂模式的工厂对象
- 负载均衡模型里面的任务分配器
这些实例都有一个共同的特点,那就是通过这些实例可以操作其它对象,它是一个公有的,大家都会来调用
- 举个简单的代码例子
#include <iostream>
#include <memory>
using namespace std;
enum phoneType {
miType = 0,
huaweiType,
oppoType
};
class phone {
public:
virtual void show()=0;
};
class mi:public phone{
public:
void show() {
cout<<"mi phone create"<<endl;
}
};
class huawei: public phone {
public:
void show() {
cout<<"huawei phone create"<<endl;
}
};
class oppo: public phone {
public:
void show() {
cout<<"oppo phone create"<<endl;
}
};
class Factory {
private:
static Factory* factory;
static int count;
public:
static Factory *Instance() { //创建单例模式的地方
if(NULL == factory) {
factory = new Factory();
}
return factory;
}
Factory() {
count++;
}
~ Factory() {
if(factory != NULL && count == 0) {
delete factory;
factory = NULL;
}
}
phone* createPhone(enum phoneType type) {
if(type == miType) {
return new mi();
} else if (type == huaweiType) {
return new huawei();
} else if (type == oppoType){
return new oppo();
} else {
return NULL;
}
}
};
Factory* Factory::factory =NULL;
int Factory::count = 0;
int main() {
Factory *f = Factory::Instance();
f->createPhone(miType)->show();
f->createPhone(huaweiType)->show();
f->createPhone(oppoType)->show();
delete f;
return 0;
}
上面的代码例子就是以单例模式来创建工厂模式的工厂。