本文主要是介绍单件模式(Singleton),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
定义:确保一个类只有一个实例,并提供一个全局访问点。
通过定义来分析单件模式的特点:
1 :单件类只可有一个实例(如何保证在单线程模式和多线程模式下的唯一性呢);
2 :单件类必须自己创建自己这惟一的实例(那么就必须在类内部进行实例化,一定会有new uniqueInstance()的调用);
3 :单件类必须给所有其他对象提供这一实例的访问接口(类中提供一个静态方法提对外提供访问点);
系统编程中需要考虑的问题:
4:性能问题,多线程模式下在保证唯一性的前提下单纯采用同步锁是否会带来性能问题呢?如何避免?
5:如果某些单件类在初始化和运行时需要大量的资源,给系统带来比较大的负担的情况下,如何优化呢?
6: 如何防止编译器的自动优化带来的影响呢?
我们通过如下的方式来满足前面提到的五点:
class Singleton
{
public:
Singleton * getInstance();//满足第三个条件
private:
Singleton();
static volatile Singleton m_instance; //通过volatile关键字来解决第六点的问题,禁止编译器对变量优化;
}
Singleton::m_instance = NULL; //通过延迟实例化来解决第五点的问题;
Singleton* Singleton::getInstance()
{
if(m_instance == NULL)
{
lock();
if(m_instance == NULL)
{
//通过双重检查和锁定的方式来解决第四点和第一点提到的问题,同时实现线程安全而且性能优越
m_instance = new Singleton(); //满足的第二个问题
}
unlock();
}
return m_instance;
}
Singleton::Singleton()
{
}
这篇关于单件模式(Singleton)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!