单例模式分为三种:(1)、懒汉式单例;

(2)、饿汉式单例;

(3)、登记式单例

单例模式的三个特点:(1)单例类只有一个实例;

(2)、单例类自行创建该类的实例(在该类的内部创建自身的实例对象)

(3)、向整个系统公开这个实例接口;

单例模式用来保证系统中一个类只有一个实例,并且单例类的构造函数必须是私有的,同时单例类必须提供一个全局访问点。

1、一个经典的单例实现。

public class Singleton {

private static Singleton uniqueInstance = null;

private Singleton() {

// Exists only to defeat instantiation.

}

public static Singleton getInstance() {

if (uniqueInstance == null) {

uniqueInstance = new Singleton();

}

return uniqueInstance;

}

// Other methods...

}

2、饿汉式单例类

1 //饿汉式单例类.在类初始化时,已经自行实例化

2 public class Singleton1 {

3     //私有的默认构造子

4     private Singleton1() {}

5     //已经自行实例化

6     private static final Singleton1 single = new Singleton1();

7     //静态工厂方法

8     public static Singleton1 getInstance() {

9         return single;

10     }

11 }

3、懒汉式单例类

1 //懒汉式单例类.在第一次调用的时候实例化

2 public class Singleton2 {

3     //私有的默认构造子

4     private Singleton2() {}

5     //注意,这里没有final

6     private static Singleton2 single=null;

7     //静态工厂方法

8     public synchronized  static Singleton2 getInstance() {

9          if (single == null) {

10              single = new Singleton2();

11          }

12         return single;

13     }

14 }

4、懒汉式单例类

1 //懒汉式单例类.在第一次调用的时候实例化

2 public class Singleton2 {

3     //私有的默认构造子

4     private Singleton2() {}

5     //注意,这里没有final

6     private static Singleton2 single=null;

7     //静态工厂方法

8     public synchronized  static Singleton2 getInstance() {

9          if (single == null) {

10              single = new Singleton2();

11          }

12         return single;

13     }

14 }

5、全局变量和单例模式的区别

(1)全局变量是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局访问功能,但是它并不能保证应用程序只有一个实例;编码规范也明确的指出应该要少使用全局变量,因为过多的使用全局变量会造成代码难读;全局变量并不能实现继承。

(2)、单例模式虽然在继承上不能很好的处理,但是还是可以实现继承的;单例模式在类中保存了它的唯实例这个类,可以保证只能创建一个实例,同时它还提供了一个访问该唯一实例的全局访问点。

单例模式的解读以及和全局变量的区别相关推荐

  1. 静态局部变量和全局变量的区别!

    静态局部变量和全局变量的区别! C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域. 1.从作用域看: (1)全局变 ...

  2. (转)静态变量和全局变量的区别

    转自:http://blog.sina.com.cn/s/blog_63278e550100lcb9.html 全局变量与静态变量 static 声明的变量在C语言中有两方面的特征: 1.变量被放在程 ...

  3. 静态全局变量和全局变量的区别

    貌似很多人区分不了这二者之间的区别,表面上看都是作用在整个文档,而且任何一个地方改变都会影响其值的改变.但是细分就会发现其区别: //Example 1 #include <iostream.h ...

  4. 搞懂全局变量、外部变量、静态全局变量的区别

    搞懂全局变量.外部变量.静态全局变量的区别 全局变量 外部变量 静态全局变量 全局变量 全局变量是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾. 如果外部变量不在文件的开头定义 ...

  5. c语言中什么是全局变量什么是局部变量,简单解读局部变量和全局变量

    什么是C语言中的变量?局部和全局变量又是什么?它们在编写程序的过程中发挥怎样的作用?今天课课家笔者为大家详细介绍局部变量和全局变量的概念和作用. 在函数的参数和返回值中我们认识到形参变量要等到函数被调 ...

  6. php局部变量和全局变量的区别,PHP局部变量、静态变量、全局变量和超全局变量的使用和区别...

    首先,PHP 中从变量的范围上可以分为 4 类,分别是静态变量.局部变量.全局变量和超全局变量. PHP 局部变量与全局变量 在 PHP 中中全局变量和局部变量的定义是和 C 语言类似的.在函数外定义 ...

  7. 单例模式(懒汉式和饿汉式区别)

    单例模式 所谓单例模式,就是保证类在内存中只有一个对象 而如何保证类在内存中只有一个对象? 思考一下,我们平时在实例化类的对象时,基本都是通过new 的方式来实例化一个对象,其实说白了,就是调用了需要 ...

  8. Java静态全局变量与全局变量的区别

    Static全局变量与普通的全局变量有什么区别? 答: 全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式. 这两者 ...

  9. java中成员变量和全局变量的区别_成员变量与全局变量的区别

    全局变量:也叫成员变量,是指在类中定义的变量:它在整个类中都有效 全局变量又可分为:类变量和实例变量 1.类变量:又叫静态变量  用static修饰  它可以直接用类名调用  也可以用对象调用   而 ...

最新文章

  1. 剑指Offer(Java实现)栈的压入、弹出序列
  2. Linux(9.21-9.27)学习笔记
  3. Django学习笔记10
  4. JAVA实验二——圆柱体
  5. WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化
  6. java socket 异常处理_socket编程报异常java.io.EOFException
  7. HCIE Security 防火墙转发流程及相关知识点 备考笔记(幕布)
  8. Command python setup.py egg_info failed with error code 1 in
  9. 项目实操总结:拼团活动的设计
  10. Google 2020 应用与游戏出海 6 月刊: 政策先行,护航应用远洋
  11. AC-Campus准入控制--Mac
  12. three.js 场景编辑器 源码解析(二)
  13. rocketdock_如何为USB闪存驱动器创建RocketDock便携式版本
  14. 苹果公司独有的“产品包装艺术”
  15. poi 获取excel单元格超链接和设置excel单元格超链接及导出excel
  16. Challenge Growth —— 从这里开始
  17. POI导出EXCEL自定义背景颜色
  18. 无约束优化和有约束优化原理
  19. android 精简rom,推荐稳定精简ROM【Android 4.1.1-CM10-3.1.10】(8月25日)
  20. 你知道图形商标要进行版权登记吗?

热门文章

  1. 杰迅CMS全国分站系统
  2. 电脑显示节电模式是什么问题_电脑的完整形式是什么?
  3. win10+NVIDIA GTX 960M+CUDA 8.0+cudnn6.0安装
  4. 个人网站搭建保姆级教程(2)- 前端工程umi脚手架搭建
  5. 深入浅出-网络OSI七层模型和TCP/IP四层模型
  6. 惠普linux进入bios设置u盘启动,惠普笔记本怎么设置u盘启动|惠普电脑bios设置usb启动的方法...
  7. 数据统计分析调研结果
  8. Python 高级编程笔记之类别
  9. debian 开发版 移植_Debian 下安装 WineHQ 最新开发版和Staging版的方法
  10. MFC 简单的MD5计算器