浅谈C++设计模式之单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止客户实例化多个对象,一个最好的办法就是让类自身负责保护它的唯一实例,这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。
单例模式因为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++设计模式之单例模式的更多相关文章
- 浅谈js设计模式之单例模式
单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的 window 对象等.在 JavaS ...
- python学习(28) 浅谈可变对象的单例模式设计
python开发,有时候需要设计单例模式保证操作的唯一性和安全性.理论上python语言底层实现和C/C++不同,python采取的是引用模式,当一个对象是可变对象,对其修改不会更改引用的指向,当一个 ...
- 浅谈Python设计模式 - 单例模式
本篇主要介绍一下关于Python的单例模式,即让一个类对象有且只有一个实例化对象. 一.使用__new__方法(基类) 要实现单例模式,即为了让一个类只能实例化一个实例,那么我们可以去想:既然限制创建 ...
- 浅谈JAVA设计模式
没有万行的代码量,就不要想搞清楚设计模式.目前本人代码量大约在六千五百行,2016年需要继续努力,尽快完成万行之约. 工作之余需要,下面提前简单讨论一下设计模式. 创建型模式,共五种:工厂模式.抽象工 ...
- 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施
初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...
- 浅谈iOS中的单例模式
iOS中的单例模式 就我本身理解而言,我认为的单例:单例在整个工程中,就相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你 ...
- 【Java基础】浅谈常见设计模式
Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...
- 浅谈Javascript设计模式
什么是模式 模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题. 也就是说用来解决常见问题的可复用的解决方案. 常见的js设计模式 Constructor(构造器)模式 Construct ...
- 浅谈Python设计模式 - 享元模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 享元模式: 享元模式是一种用于解决资源和性能压力时会使用到的设计模式,它的核心思 ...
随机推荐
- Jetty 的工作原理以及与 Tomcat 的比较
Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所 ...
- 七个结构模式之享元模式(Flyweight Pattern)
定义: 运用共享技术对大量细粒度对象的复用,这要求这些对象都很相似,状态变化很小.将这些对象的内部状态和外部状态进行区分,对于内部状态相同的只存储一个对象,而对不同的外部状态则采用不同的操作. 结构图 ...
- (原) tmux安装与使用
本文为原创文章,转载请注明出处,谢谢 tmux安装 1.yum search tmux 2.yum install package (package为选择要安装的包名,如上图“tmux.x86_64” ...
- 【干货分享】Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- sharepoint2010问卷调查(4)-实现问卷的重复答复次数(采用自定义字段类型和JS)
sharepoint的问卷调查可以设置重复和一次答复.但是设置一次后,调查过的用户再进行答复.会提示如下图: 分析下:该提示用户体验很不好.给用户感觉是系统出问题了.因此网上有人提出用eventhan ...
- java连接hbase报错
报错信息如下: The node /hbase is not in ZooKeeper. It should have been written by the master. Check the va ...
- iOS/Android网络消息推送的实现两种方法
移动时代,用户为王,而每个APP拥有的活跃用户量(Active Users),决定了其价值. 消息推送成为了不可或缺的活跃唤起工具. 目前消息推送有如下两种途径: 1.iOS传统方式: 通过Apple ...
- Fragment中的按键监听
在Fragmentzhong中写按键监听,有两处处需要注意: 1)是否是当前显示的fragment:. 2)在所依托的activity中的onKeyDown方法处理监听事件: 其他地方和普通按键监听一 ...
- EditText显示明文与密码
布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...
- 如何开启win7端口的图文教程
Windows 7/Vista/XP/2003等系统中的远程终端服务是一项功能非常强大的服务,下面来教教大家如何开启端口:打开“控制面板”中的“Windows防火墙”,点击左侧的“高级设置” 右击“入 ...