第1篇 单例模式
来源:互联网 发布:道路弯沉值计算软件 编辑:程序博客网 时间:2024/06/10 06:45
1.什么是单例模式
单例模式的意思就是对于一个对象来说只有他的一个实例,不可以获取他的多个实例。
2.为什么要用单例模式
有一些地方必须要用到单例模式,或者有些地方使用单例模式可以大大提高程序的运行效率,比如数据库操作,每次进行数据库的操作都只需要数据库的一个连接对象就可以了,如果每次进行数据库的操作都获得一个数据库的连接将会大大降低程序的运行效率,要知道进行一次数据库连接耗费的时间是非常多的。当程序越来越复杂,一个数据库连接对象满足不了的时候,就可以利用数据库连接池来管理这些数据库连接对象,也不是每一次数据库操作就new一个数据库实例。数据库连接池技术其实也属于数据库单例模式的应用。再比如日志管理,要求每日志要统一进行输出,这个时候就必须要利用单例模式了。
3.如何定义单例模式
单例模式的意思就是对于一个对象来说只有他的一个实例,不可以获取他的多个实例。
2.为什么要用单例模式
有一些地方必须要用到单例模式,或者有些地方使用单例模式可以大大提高程序的运行效率,比如数据库操作,每次进行数据库的操作都只需要数据库的一个连接对象就可以了,如果每次进行数据库的操作都获得一个数据库的连接将会大大降低程序的运行效率,要知道进行一次数据库连接耗费的时间是非常多的。当程序越来越复杂,一个数据库连接对象满足不了的时候,就可以利用数据库连接池来管理这些数据库连接对象,也不是每一次数据库操作就new一个数据库实例。数据库连接池技术其实也属于数据库单例模式的应用。再比如日志管理,要求每日志要统一进行输出,这个时候就必须要利用单例模式了。
3.如何定义单例模式
饿汉式单例模式,
其定义形式如下:
public class Demo {private static Demo demo = new Demo();private Demo(){}public static Demo getintance(){return demo;}}在该模式下,在类被加载的时候实例就被创建。
懒汉式单例模式,
其定义形式如下:
public class Demo2 {private static Demo2 demo2 = null;private Demo2(){}public static Demo2 getintance(){if(demo2 == null){demo2 = new Demo2();}return demo2;}}懒汉式单例模式,顾名思义就是他很懒,只有在要获取实例的而没有创建的时候他才会创建一个实例。但是,懒汉式单例模式有一个缺点,就是在多线程环境下,比如有一个线程正好运行完if(demo2 == null)就被其他线程占得了cpu,这是另外一个线程获得了一个实例,这个时候刚才的那个线程继续执行,又获得了一个实例。这样就获得了两个实例。不符合单例模式的规则啦,而饿汉式单例模式就不存在这个问题。那么应该如何解决这个问题呢?
双检测锁机制的单例模式,
其定义形式如下:
package com.john;public class Demo3 {private static Demo3 demo3 = null;private Demo3(){}public static Demo3 getinstance(){if(demo3 == null){synchronized(Demo3.class){if(demo3 == null){demo3 = new Demo3();}}}return demo3;}}在这种方式下,这有第一次创建实例的时候才进入同步方法,以后的实例已经创建,将不会再次进入同步方法。
0 0
- 第1篇 单例模式
- 第1篇--Singleton单例设计模式
- 设计模式-第1讲-单例
- 设计模式 第4篇 单例模式 Singleton
- 认识各种单例模式第一篇(开发篇)
- (第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
- (第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
- (第Ⅱ部分 创建型模式篇) 第1章 单件模式(Singleton Pattern)
- 第11天 单例模式
- 第 3 章 单例模式
- 第2章 单例模式
- 第7章 单例模式
- 第7章 单例模式进阶
- 单例模式(第21章)
- 《Android源码设计模式》读书笔记 (1) 第1章 单例模式
- java设计模式第一天 单例模式
- java设计模式第6弹--单例模式
- 第8章 创建型模式---单例模式
- c#内部类访问权限
- 力所能及之struts2转换器
- 机器学习与智能优化 之 浅层和深层神经网络
- win2008 R2下开启显卡硬件加速
- 读thinking in java的收获(二) --eclipse生成javadoc文档
- 第1篇 单例模式
- 带结构体的队列 进出实例
- zoj 3213 Beautiful Meadow(插头dp)
- 最短路径
- 欢迎使用CSDN-markdown编辑器
- poj 1018 dp\枚举+剪枝 (选择带宽)
- 浅谈Java程序加载机制
- LeetCode --- 16. 3Sum Closest
- (hdu step 2.1.5)七夕节(球一个数的所有因子之和)