首页 > 代码库 > 单件模式
单件模式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实用性:1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它。
2.当这个唯一的实例应该是通过子类可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
效果: 1.只有一个实例,可以严格的控制客户怎样以及何时访问。
2.缩小名空间,避免了唯一实例的全局变量污染名空间。
3.可以控制对象的实例个数。
代码示例:这里类是一个人Micla,世界上仅有一个Mical,只能产生一个实例。
#ifndef _SINGLETON_#define _SINGLETON_class Mical{public: ~Mical(){} static Mical* GetMical() { if(NULL == _mpMical) { _mpMical = new Mical; static Delete Del; } return _mpMical; }private: static Mical* _mpMical; ////避免了不同情况实例化类对象 Mical(const Mical& another){} Mical& operator = (const Mical& another){} Mical(){}};#endif
实现部分:
#include <iostream>#include "Singleton.h"using namespace std;Mical* Mical::_mpMical = NULL;int main(){ Mical* pMical = Mical::GetMical(); delete Mical::GetMical(); return 0;}
用Mical* pMical = Mical::GetMical(); 实现了访问Micla 然后我们可以通过pMical访问Mical的各种属性(假设为:身高,性别等)
之后通过delete Mical::GetMical(); 删除对象。 但这样的删除容易被遗忘,因为new的过程是被封装起来的。
于是通过内嵌类实现自动delete:
#ifndef _SINGLETON_#define _SINGLETON_class Mical{public: ~Mical(){} static Mical* GetMical() { if(NULL == _mpMical) { _mpMical = new Mical; static Delete Del; } return _mpMical; } private: static Mical* _mpMical; ////避免了不同情况实例化类对象 Mical(const Mical& another){} Mical& operator = (const Mical& another){} Mical(){} class Delete{ public: Delete(){} ~Delete(){delete _mpMical;} };};#endif
这就实现了Singleton;
要注意的是 1.封死其他的实例化接口 2.对象删除问题处理
-----新手初学,望大神指点-----
单件模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。