单件模式是设计模式中最简单的模式了。

定义: 确保一个类只有一个实例,并提供一个全局的访问点。

  • 把一个类设计成自己管理的一个单独实例,同时避免其他类再自行生成实例(所以构造函数用protect或privite)
  • 也提供全局的访问点。public函数

看下代码的实现:

1 class Singleton
2 {
3  protected:
4 Singleton(){};
5  public:
6 ~Singleton(){};
7
8 static shared_ptr<Singleton> getInstance()
9 {
10 if (!pInstance_.get())
11 {
12 pInstance_ = shared_ptr<Singleton>(new Singleton());
13 return pInstance_;
14 } 
else
{
return pInstance_;
}
15 }
16 private:
17 static shared_ptr<Singleton> pInstance_;
18 };
shared_ptr<Singleton> Singleton::pInstance_ = shared_ptr<Singleton>();
 
单件的继承//add in 201205-15
 
对于单件模式, 因为内存模型的关系, 理论上是不能被继承的,但是可以利用c++模板技术实现单件模式的继承:
#include <QObject>template <typename T>
class ISingleton : public QObject
{
private:struct ObjectCreator{ObjectCreator() { ISingleton<T>::instance();}inline void do_nothing() const { }};static ObjectCreator objCreator_;protected:ISingleton(){};
public:static T & instance(){static T obj;objCreator_.do_nothing();return obj;}
};template <typename T>
typename ISingleton<T>::ObjectCreator ISingleton<T>::objCreator_;

 此段代码从 boost的单件中修改而来。

当需要有一个新的单件类的时候,可以用如下方法:

class TcpCommandControl : public ISingleton<TcpCommandControl>
{Q_OBJECTpublic:~TcpCommandControl();void   execute(shared_ptr<TcpRequestBase> req, shared_ptr<TcpResponseBase> resp);private:TcpCommandControl();friend class ISingleton<TcpCommandControl>;private slots:void   responseReceiveSlot(QByteArray const& packet);private:shared_ptr<PacketTcpSocket>     tcpSocket_;shared_ptr<TcpResponseBase>        response_;
};

  

 

转载于:https://www.cnblogs.com/sld666666/archive/2011/05/27/2060256.html

设计模式----单件模式(c++)相关推荐

  1. NET中的设计模式---单件模式

    如众所知,单件模式做为<Gof 23中设计模式>之一,其意图仅允许单件类的一个实例存在(扩展单件模式不在此文范围内),并提供全局的访问方法.UML类图如下. http://csharpin ...

  2. Java设计模式——单件模式

    概述 有一些对象其实我们只需要一个,比方说:线程池(threadpool).缓存(cache).对话框.处理偏好设置和注册表(registry)的对象.日志对象,充当打印机.显卡等设备的驱动程序的对象 ...

  3. HeaFirst设计模式-单件模式[单例模式](Singleton Pattern)

    深入分析单件模式 本次主要介绍的内容有 单件模式 单线程下的单件模式实现 多线程下实现单件模式出现的问题分析 JMM内存模型 多线程下的单件模式实现的三种方式 这些内容,可以从最根本理解单例模式的代码 ...

  4. 魔兽争霸之PHP设计模式-单件模式[Singleton]

    前言:我写的关于设计模式的一系列文章.这系列的文章主要针对没接触过设计模式的,或者说接触过但还不是很明白的PHPer. 问题的提出: 可能很多人都写过类,文件操作的,数据库的-- 对于数据库的类来说有 ...

  5. C++设计模式——单件模式(singleton pattern)

    一.原理讲解 由于单件模式也称为单例模式,分为懒汉式单例模式和饿汉式单例模式,两者主要区别是类对象的返回是在编译时创建?还是调用时才创建?其中,懒汉式单例模式是在程序调用时才创建,而饿汉式单例模式是在 ...

  6. 设计模式-单件模式(Singleton pattern)

    模式描述:确保一个类只有一个实例,并提供访问这个实例的全局点. Code using System; using System.Collections.Generic; using System.Li ...

  7. .NET设计模式(2):单件模式(Singleton Pattern)

    转载:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 单件模式(Singleton Pattern) --.NET设计模式系列之二 ...

  8. 设计模式之单件模式(Singleton Pattern)

    一.单件模式是什么? 单件模式也被称为单例模式,它的作用说白了就是为了确保"该类的实例只有一个" 单件模式经常被用来管理资源敏感的对象,比如:数据库连接对象.注册表对象.线程池对象 ...

  9. C语言和设计模式(之单件模式)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 有过面试经验的朋友,或者对设计模式有点熟悉的朋友,都会对单件模式不陌生.对很多面试官而言,单件 ...

最新文章

  1. python gui编程框架添加工具栏_python gui编程,我是初学者。用tk,制作下拉菜单的command不分我想打开另一个界面。如和解决,求解!!...
  2. TensorFlow基本使用
  3. docker逃逸漏洞复现 cve-2019-5736
  4. android 增删改查 源码_学生信息增删改查小程序案例(springboot服务端)
  5. python生成100个随机数_Python_0——100闭区间产生3个随机数,两种方法排序
  6. Py之scikiti -survival:scikiti -survival库的简介、安装、使用方法之详细攻略
  7. maven nexus 说明
  8. 手机usb无法被电脑识别_6种方法解决电脑无法识别移动硬盘
  9. redis常用命令(高级篇)
  10. 后端+数据库(pycharm+mysql):使用 “flask”制作的调查量表/问卷
  11. CentOS 基础知识与命令总结
  12. Intel和AMD处理器各有什么特点?该如何选择?
  13. 矩阵相乘的理解(矩阵相乘的几何意义)及证明过程
  14. centos之dd命令
  15. 幼儿园计算机培训心得,幼儿园心得体会范文
  16. C语言输出整数部分和小数部分
  17. 秀日记:这个升学比例吓坏大家了
  18. 互联网业务数据分析- 数据分析基础
  19. ArcGisPro脚本工具【6】——湘源画的规划用地CAD带指标导入ArcGIS数据库
  20. STM32F4实现SD卡读写

热门文章

  1. Spring AOP 增强框架 Nepxion Matrix 详解
  2. 急我所需!机器学习、深度学习绘图模板.ppt
  3. 中国高校4篇研究今日同时登上Nature!清华北大上交浙工大等在列
  4. 奥巴马竟被「去马赛克 AI」洗白,CVPR 新研究惹上种族歧视大麻烦,LeCun 也被卷入其中...
  5. 33岁180程序员去相亲,被人嫌弃工资不够高,房子不是学区房,网友炸了!
  6. 清华博士宅家太无聊,给猫咪讲函数
  7. 11岁少女叫板支付宝!会写代码的孩子,到底多可怕?
  8. 年底送点福利,包邮送55本!Python、大数据、人工智能任你挑!
  9. 美多商城之用户中心(用户基本信息)
  10. javaweb_A service with the given Service Name is already installed on this machine.[【】删除服务】