Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79057
  • 博文数量: 20
  • 博客积分: 1540
  • 博客等级: 上尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-02 14:09
文章分类

全部博文(20)

文章存档

2011年(15)

2010年(5)

我的朋友

分类:

2011-03-24 10:56:52

Singleton Constructor
ton1 var = 20
ton2 var = 150 当我们要让一个类产生同一个对象对客户端服务的时候,比如管理数据库连接,管理文件IO等,这时我们就要使用到单例模式。下面是该模式的C++实现(注泽说明)
#include
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"<}
Singleton::~Singleton()
{
        delete instance;
}
//初始化静态成员
Singleton* Singleton::instance = new Singleton();
Singleton* Singleton::GetInstance()
{
        return instance;
}
int Singleton::getVar()
{
        return this->var;
}
void Singleton::setVar(int var)
{
        this->var=var;
}
int main(int argc,char * argv[])
{
        Singleton *ton1 = Singleton::GetInstance();
        Singleton *ton2 = Singleton::GetInstance();
        cout<<"ton1 var ="<getVar()<        ton1->setVar(150);
        cout<<"ton2 var = "<getVar()<        return 0;
}
输出如下:
 Singleton Constructor
   ton1 var = 20
   ton2 var = 150
在输出结果中我们可以看到,构造方法只调用了一次,ton1与ton2是指向同一个对象的。
 
另外:
1、如果单例模式想用多个实例的话可以在类内实现:比如想用两个实例就写两个单例 比如
GetAInstance()
GetBInstance()
2、如果是在多线程了得加锁。

 
阅读(1174) | 评论(0) | 转发(0) |
0

上一篇:推荐一个论坛

下一篇:C++静态成员函数

给主人留下些什么吧!~~