单例模式及C++实现

来源:互联网 发布:access数据库考试重点 编辑:程序博客网 时间:2024/06/04 17:50

单例模式及c++实现

昨天面试淘宝,面试官让我写个单例模式,一时语塞。惭愧设计模式没看好,回来研究了一下,在单例模式构造函数是可以private的,用静态成员函数GetInstance来获得实例。

单例模式:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

  单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

一些资源管理器常常设计成单例模式。让一个类产生同一个对象对客户端服务的时候,比如管理数据库连接,管理文件IO等,这时我们就要使用到单例模式。下面是该模式的C++实现(注泽说明)

#include <iostream>
using namespace std;
//单例类的C++实现
class Singleton
{
private:
Singleton();//注意:构造方法私有
virtual ~Singleton();
static Singleton* instance;//惟一实例
int var;//成员变量(用于测试)
public:
static Singleton* GetInstance();//工厂方法(用来获得实例)
int getVar();//获得var的值
void setVar(int);//设置var的值
};

//构造方法实现
Singleton::Singleton()
{
this->var = 20;
cout<<"Singleton Constructor"<<endl;
}
Singleton::~Singleton()
{
delete instance;
}
//初始化静态成员
Singleton* Singleton::instance=new Singleton();
Singleton* Singleton::GetInstance()
{
return instance;
}
//seter && getter含数
int Singleton::getVar()
{
return this->var;
}
void Singleton::setVar(int var)
{
this->var = var;
}
//main
int main(int argc, char* argv[])
{
Singleton *ton1 = Singleton::GetInstance();
Singleton *ton2 = Singleton::GetInstance();
cout<<"ton1 var = "<<ton1->getVar()<<endl;
ton1->setVar(150);
cout<<"ton2 var = "<<ton2->getVar()<<endl;

return 0;
}

输出如下:

Singleton Constructor
ton1 var = 20
ton2 var = 150

在输出结果中,构造方法只调用了一次,ton1与ton2是指向同一个对象的。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 陌陌不能发动态怎么办 人脸识别过不了怎么办 冷光美白牙齿酸怎么办 冷光美白牙齿疼怎么办 上火长痘怎么办最有效 2岁半宝宝上火怎么办 8个月的宝宝上火怎么办 牙齿上火了很疼怎么办 长智慧齿牙龈痛怎么办 智慧牙蛀牙好痛怎么办 一上火智齿就疼怎么办 智齿发炎了很疼怎么办 长个智齿疼死了怎么办 智齿发炎脸肿了怎么办 长智齿的时候疼怎么办 长智齿耳朵也疼怎么办 长智齿疼的厉害怎么办 智齿顶的肉疼怎么办 怀孕了老是牙疼怎么办 怀孕8个月牙痛怎么办 孕晚期上火牙疼怎么办 怀孕了牙疼怎么办啊 孕晚期牙疼怎么办妙招 孕晚期牙疼上火怎么办 孕晚期智齿牙疼怎么办 牙齿张智齿很痛怎么办 30岁长智齿牙疼怎么办 我长智齿牙龈痛怎么办 出智齿引起牙龈肿痛怎么办 要长智齿牙肉痛怎么办 牙齿肿了有脓包怎么办 牙肉发炎有脓包怎么办 拔智齿伤了神经怎么办 牙下面的肉疼该怎么办 后面牙突然好疼怎么办 拔智齿后的牙洞怎么办 换牙期牙齿长歪怎么办 小孩子牙齿长歪了怎么办 换牙门牙长歪了怎么办 宝宝牙齿长歪了怎么办 小孩的牙齿长歪了怎么办