C++设计模式浅识单例模式

什么是单例模式? 

保证一个类只有一个实例,并提供一个访问它的全局访问点。【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++免费学习笔记(深入)”;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1431950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 05:57:42
下一篇 2025年12月17日 05:57:54

相关推荐

发表回复

登录后才能评论
关注微信