什么是单例模式?
保证一个类只有一个实例,并提供一个访问它的全局访问点。【dp】
让类的自身负责保存它的唯一实例,这个类保证没有其他实例可以被创建,并且此类可以提供一个访问该实例的方法。【dp】
什么时候需要单例模式?
程序只需要一个方法控制某项功能,不允许创建第二个此功能。比如:银行使用的取号机。
使用单例模式需要了解c++++static关键字的用法我的这篇博文对static作了浅析
测试用例:
[code]int main(){
//单例模式初始化两个实例的方法
Singleton *s1 = Singleton::getInstance();
Singleton *s2 = Singleton::getInstance();
if(s1 == s2)
std::cout << "Two the objects are the same instance.\n";
else
std::cout << "Two the objects are the different instance.\n";
return 0;
}单例模式实现:
[code]class Singleton{
private:
//将构造函数声明为私有的,从而保证只允许类内使用
Singleton(){}
//声明一个类的静态对象(类外初始化)
static Singleton *instance;
public:
//静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象
static Singleton* getInstance(){
if(instance != NULL){
instance = new Singleton;
}
return instance;
}
};
//类外部初始化静态成员变量(静态成员变量必须被初始化)
Singleton* Singleton::instance = NULL;附:若为多线程编程情况下,需要加锁并做两次判断是否为空。
[code]class Singleton{
private:
//将构造函数声明为私有的,从而保证只允许类内使用
Singleton(){}
//声明一个类的静态对象(类外初始化)
static Singleton *instance;
public:
//静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象
static Singleton* getInstance(){
if(instance != NULL){
lock(syncObj){
if(instance != NULL){
instance = new Singleton;
}//if
}//lock
}//if
return instance;
}
};
//类外部初始化静态成员变量(静态成员变量必须被初始化)
Singleton* Singleton::instance = NULL;加lock是为了两个线程只有一个进入,另一个线程排队等候。第一个线程进入并出来后,后者才能进入。第二个判空是为了保证第一个线程创建了实例,第二个线程进入后就不再创建实例。
以上就是C++设计模式浅识单例模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!
立即学习“C++免费学习笔记(深入)”;
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号