浅谈C++设计模式之单例模式

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

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

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

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

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

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

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

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

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

  • Singleton:定义一个Instance操作

  1. class Singleton{ 
  2. public
  3.     static Singleton* Instance(); 
  4. protected
  5.     Singleton(){} 
  6.     Singleton(const Singleton &instance){} 
  7.     Singleton& operator=(const Singleton &instance){} 
  8. private
  9.     static Singleton* instance; 
  10. }; 
  11. Singleton* Singleton::Instance(){ 
  12.     if(instance == 0
  13.         instance = new Singleton; 
  14.     return instance; 
  15. Singleton* Singleton::instance = 0

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

责任编辑:王雪燕 来源: 博客园
相关推荐

2016-03-28 10:23:11

Android设计单例

2022-06-07 08:55:04

Golang单例模式语言

2021-02-01 10:01:58

设计模式 Java单例模式

2023-03-21 15:21:52

开发程序设计static

2021-03-02 08:50:31

设计单例模式

2010-02-05 17:00:06

C++单例模式

2013-11-26 16:20:26

Android设计模式

2010-02-03 09:43:16

C++单例模式

2022-02-06 22:30:36

前端设计模式

2010-01-27 10:45:21

C++单例模式

2024-02-04 12:04:17

2021-09-07 10:44:35

异步单例模式

2020-06-08 08:04:49

设计模式结构型接口

2009-09-02 16:23:27

C# Singleto

2021-08-11 17:22:11

设计模式单例

2022-09-29 08:39:37

架构

2023-11-13 16:49:51

C++单例

2022-03-29 07:52:07

设计模式单例设计模式java

2013-03-26 10:35:47

Objective-C单例实现

2024-03-06 13:19:19

工厂模式Python函数
点赞
收藏

51CTO技术栈公众号