单例模式
-
概述 : 是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类中只有一个实例.
-
要点
- 单例类只能有一个实例,
- 它必须自行创建这个实例
- 他必须自行向整个系统提供这个实例.
-
实现
- 单例模式的类只提供私有的构造函数
- 类定义中含有一个该类的静态私有对象
- 该类提供了一个静态的公有的函数用于创建或获取他本身的静态私有对象
- 代码实现
这是可以实现要求的写法,但是有一个问题,在多线程的情况下,不能保证 判断instance == null 时,instance怎么解决这个问题, 首先想到的 是使用 synchronized 关键字.
使用上边的写法每次调用getInstance方法,都会对对象上锁,这样在性能上有所下降.事实上,只有在第一次创建对象的时候是上锁就可以了. 优化代码如下.
饿汉模式
懒汉式存在的问题:
- 懒汉式每次判断,当需要使用对象的时候才加载,会影响程序的速度.
- 在并发的情况下,懒汉式是不安全的,例如有两个线程:线程A.线程B.在同一时间调用getInstance()方法,如果线程A先进入判断(if)操作.然后线程B也进入并进行上锁控制,这样的结果是会有两个实例被创建.
饿汉式思想创建单例
通过这个方法,将单例的创建交给了内部类,内部类的静态方法保证了对象只能被实例一次.
我将23种设计模式的全部代码上传到CSDN,有用得到的同学 可以去下载.
下载地址 : 点我
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91338 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!