单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  通常我们可以让一个全局变量使得一个对象被访问,但它不能防止客户实例化多个对象,一个最好的办法就是让类自身负责保护它的唯一实例,这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。

  单例模式因为Singleton类封装它的唯一实例,这样它可以严格控制客户怎样访问它以及何时访问它,简单地说就是对唯一实例的受控访问。

  实现原理:将构造函数私有化,只提供一个静态方法来创建一个对象。

  (1) 将构造函数设置成private;

  (2) 声明一个静态的字段,初始化一个实例,返回Singleton对象;

  (3) 用静态方法或静态属性,返回那个唯一的实例

  当然,在对象用多线程时,可能会造成创建多个实例,可以给创建对象的过程加锁。

  • Singleton:定义一个Instance操作

class Singleton{
public:
static Singleton* Instance();
protected:
Singleton(){}
Singleton(const Singleton &instance){}
Singleton& operator=(const Singleton &instance){}
private:
static Singleton* instance;
};
Singleton* Singleton::Instance(){
if(instance == )
instance = new Singleton;
return instance;
}
Singleton* Singleton::instance = ;

  其实,单例模式中最关键的就是把public的构造函数私有化。这样就把构造对象的实例化的权利交给了类本身,让Singleton来控制类的实例化。当然除了构造函数之外,还需要把类的控制复制函数(拷贝构造函数,赋值运算)私有化,因为客户端没有构造的权利,所以也就没有使用控制复制函数的权利。

版权所有,欢迎转载,转载请注明出处!

浅谈C++设计模式之单例模式的更多相关文章

  1. 浅谈js设计模式之单例模式

    单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的 window 对象等.在 JavaS ...

  2. python学习(28) 浅谈可变对象的单例模式设计

    python开发,有时候需要设计单例模式保证操作的唯一性和安全性.理论上python语言底层实现和C/C++不同,python采取的是引用模式,当一个对象是可变对象,对其修改不会更改引用的指向,当一个 ...

  3. 浅谈Python设计模式 - 单例模式

    本篇主要介绍一下关于Python的单例模式,即让一个类对象有且只有一个实例化对象. 一.使用__new__方法(基类) 要实现单例模式,即为了让一个类只能实例化一个实例,那么我们可以去想:既然限制创建 ...

  4. 浅谈JAVA设计模式

    没有万行的代码量,就不要想搞清楚设计模式.目前本人代码量大约在六千五百行,2016年需要继续努力,尽快完成万行之约. 工作之余需要,下面提前简单讨论一下设计模式. 创建型模式,共五种:工厂模式.抽象工 ...

  5. 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施

    初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...

  6. 浅谈iOS中的单例模式

    iOS中的单例模式     就我本身理解而言,我认为的单例:单例在整个工程中,就相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你 ...

  7. 【Java基础】浅谈常见设计模式

    Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...

  8. 浅谈Javascript设计模式

    什么是模式 模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题. 也就是说用来解决常见问题的可复用的解决方案. 常见的js设计模式 Constructor(构造器)模式 Construct ...

  9. 浅谈Python设计模式 - 享元模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 享元模式: 享元模式是一种用于解决资源和性能压力时会使用到的设计模式,它的核心思 ...

随机推荐

  1. windows / linux系统中,端口被占用解决方法

    一.在windows操作系统中,查询端口占用和清除端口占用的程序 提升权限后用:netstat -b或用 1.查询端口占用的进程ID 点击"开始"-->"运行&qu ...

  2. sql server 数据误删找回

    /****** Object: StoredProcedure [dbo].[Recover_Deleted_Data_Proc] Script Date: 04/23/2014 22:11:59 * ...

  3. NProgress.js template

    NProgress.js:加载进度条:http://ricostacruz.com/nprogress/ 基础的这几个方法 这个网站上都有 我在一个地方看到这个代码 NProgress.configu ...

  4. 正则中关于修饰符g以及exec和match区别的一个小demo

    代码: 输出结果 补充: reg.lastIndex:下一次正则捕获的开始查找的索引位置 ->正则的懒惰性就是因为默认情况下lastIndex值都是0,我们不管执行几次exec,都是从字符串的开 ...

  5. div,span,p等转换成可编辑

    当前它能够将任意不可编辑的标签(span.div.p...等)转换成可编辑的text input.password.textarea.下拉列表(drop-down list)等标签.你可以利用它的ed ...

  6. sharepoint2013- Office web app server2013详细的安装和部署

    前提条件 Office web app server2013不能跟sharepoint server2013安装在同一台服务器上,如果安装在同一台服务器上将提示如下错误: 后来查询资料:  按照官方文 ...

  7. Android自带的theme

    android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 android:theme="@andro ...

  8. JavaScript学习06 JS事件对象

    JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...

  9. struts理解

    最近大家都在找工作,我好迷茫,觉得自己会的东西太少了.所以决定开始学习SSH三大框架. 首先是struts. struts是基于mvc模式的框架.(struts其实也是servlet封装,提高开发效率 ...

  10. Android 隐式意图和显示意图的使用场景

    本文实现一个隐式意图的应用,激活短信应用 public void click4(View view) { Intent intent = new Intent(); intent.setAction( ...