首页 > 编程 > C++ > 正文

C++单例模式应用实例

2020-01-26 15:16:13
字体:
来源:转载
供稿:网友

本文实例讲述了C++单例模式及其相关应用方法,分享给大家供大家参考。具体方法分析如下:

定义:

一个类有且仅有一个实例,并且提供一个访问它的全局访问点。
要点:
1、类只能有一个实例;
2、必须自行创建此实例;
3、必须自行向整个系统提供此实例。

实现一:单例模式结构代码

singleton.h文件代码如下:

#ifndef _SINGLETON_H_#define _SINGLETON_H_class Singleton{public:  static Singleton* GetInstance();protected:  Singleton();private:  static Singleton *_instance;};#endif

singleton.cpp文件代码如下:

#include "singleton.h"#include <iostream>using namespace std;Singleton* Singleton::_instance = 0;Singleton::Singleton(){  cout<<"create Singleton ..."<<endl;}Singleton* Singleton::GetInstance(){  if(0 == _instance)  {    _instance = new Singleton();  }  else  {    cout<<"already exist"<<endl;  }  return _instance;}

main.cpp文件代码如下:

#include "singleton.h"int main(){  Singleton *t = Singleton::GetInstance();  t->GetInstance();  return 0;}

实现二:打印机实例

singleton.h文件代码如下:

#ifndef _SINGLETON_H_#define _SINGLETON_H_class Singleton{public:  static Singleton* GetInstance();  void printSomething(const char* str2Print);protected:  Singleton();private:  static Singleton *_instance;  int count;};#endif

singleton.cpp文件代码如下:

#include "singleton.h"#include <iostream>using namespace std;Singleton* Singleton::_instance = 0;Singleton::Singleton(){  cout<<"create Singleton ..."<<endl;  count=0;}Singleton* Singleton::GetInstance(){  if(0 == _instance)  {    _instance = new Singleton();  }  else  {    cout<<"Instance already exist"<<endl;  }  return _instance;}void Singleton::printSomething(const char* str2Print){  cout<<"printer is now working , the sequence : "<<++count<<endl;  cout<<str2Print<<endl;  cout<<"done/n"<<endl;}

main.cpp文件代码如下:

#include "singleton.h"int main(){  Singleton *t1 = Singleton::GetInstance();  t1->GetInstance();  t1->printSomething("t1");  Singleton *t2 = Singleton::GetInstance();  t2->printSomething("t2");  return 0;}

Makefile文件:

CC=g++CFLAGS = -g -O2 -Wallall:  make singletonsingleton:singleton.o/  main.o    ${CC} -o singleton main.o singleton.oclean:  rm -rf singleton  rm -f *.o.cpp.o:  $(CC) $(CFLAGS) -c -o $*.o $<

运行效果如下图所示:

 

可以看到,对打印顺序count的计数是连续的,系统中只有一个打印设备。

希望本文所述对大家的C++程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表