C++单例模式应用实例

 更新时间:2014年10月08日 11:45:43   投稿:shichen2014  
这篇文章主要介绍了C++单例模式应用实例,详细讲述了单例模式的原理与结构,及相关的打印机应用实例,需要的朋友可以参考下

本文实例讲述了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 -Wall

all:
  make singleton

singleton:singleton.o\
  main.o  
  ${CC} -o singleton main.o singleton.o

clean:
  rm -rf singleton
  rm -f *.o

.cpp.o:
  $(CC) $(CFLAGS) -c -o $*.o $<

运行效果如下图所示:

 

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

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

相关文章

  • C++实现AVL树的基本操作指南

    C++实现AVL树的基本操作指南

    AVL树是高度平衡的而二叉树,它的特点是AVL树中任何节点的两个子树的高度最大差别为1,下面这篇文章主要给大家介绍了关于C++实现AVL树的相关资料,需要的朋友可以参考下
    2022-01-01
  • C语言银行系统课程设计

    C语言银行系统课程设计

    这篇文章主要为大家详细介绍了C语言银行系统课程设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 用C实现PHP扩展 Image_Tool 图片常用处理工具类的使用

    用C实现PHP扩展 Image_Tool 图片常用处理工具类的使用

    该扩展是基于ImageMagick基础实现的,图片操作调用的是ImageMagick API
    2013-04-04
  • C/C++实现俄罗斯方块游戏

    C/C++实现俄罗斯方块游戏

    这篇文章主要介绍了如何利用C/C++实现经典游戏之一的俄罗斯方块,文中的实现步骤讲解详细,对我们学习C语言和C++有一定的帮助,需要的可以参考一下
    2022-02-02
  • Inline Hook(ring3)的简单C++实现方法

    Inline Hook(ring3)的简单C++实现方法

    这篇文章主要介绍了Inline Hook(ring3)的简单C++实现方法,需要的朋友可以参考下
    2014-08-08
  • 浅理解C++ 人脸识别系统的实现

    浅理解C++ 人脸识别系统的实现

    这篇文章主要介绍了浅理解C++ 人脸识别系统的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C++不使用变量求字符串长度strlen函数的实现方法

    C++不使用变量求字符串长度strlen函数的实现方法

    这篇文章主要介绍了C++不使用变量求字符串长度strlen函数的实现方法,实例分析了strlen函数的实现原理与不使用变量求字符串长度的实现技巧,需要的朋友可以参考下
    2015-06-06
  • QT已有项目导入工程时注意事项图文详解

    QT已有项目导入工程时注意事项图文详解

    QT开发这几年大大小小项目做了不少,花了点时间对知识点总结整合了一部分,下面这篇文章主要给大家介绍了关于QT已有项目导入工程时注意事项的相关资料,需要的朋友可以参考下
    2023-11-11
  • C++设计模式之组合模式

    C++设计模式之组合模式

    这篇文章主要介绍了C++设计模式之组合模式,本文讲解什么是组合模式、组合模式的优点、组合模式实例等内容,需要的朋友可以参考下
    2014-09-09
  • 如何实现socket网络编程的多线程

    如何实现socket网络编程的多线程

    首先,学好计算机网络知识真的很重要。虽然,学不好不会影响理解下面这个关于宏观讲解,但是,学好了可以自己打渔吃,学不好就只能知道眼前有鱼吃却打不到渔。在Java中网络程序有2种协议:TCP和UDP,下面可以和小编一起学习下
    2019-05-05

最新评论