单例模式精讲
来源:互联网 发布:java重要知识点 编辑:程序博客网 时间:2024/06/06 15:54
思想精髓
使得一个类只能够创建一个对象。
概述
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
设计思想
如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为 private,这样,就不能用 new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。
因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
单例模式结构图
两种单例模式
饿汉式,懒汉式
饿汉式
所谓饿汉式,就是在类加载时就创建单例类的实例对象。
代码示例
package SingletonTest;/** * Created by SSSomebody on 2017/4/27. */public class SingletonE { //1.在类的内部创建一个类的实例 //2.私有化此对象,通过公共方法来调用 private static SingletonE singletonE = new SingletonE(); //3.私有化构造器,使得在类的外部不能够调用此构造器 private SingletonE(){} //4.创建公共方法 public static SingletonE getInstance(){ return singletonE; }}
懒汉式
所谓懒汉式,就是在需要的时候才会创建单例类的实例对象。也就是懒加载。
简单实现
package SingletonTest;/** * Created by SSSomebody on 2017/4/27. */public class SingletonL { private static SingletonL singleL ; private SingletonL() {} public static SingletonL getInstance(){ //因为创建实例的过程并非原子操作, //所以在多线程下,存在线程安全问题 if (singleL == null) { singleL = new SingletonL(); } return singleL; }}
线程安全的懒汉式
package SingletonTest;/** * Created by SSSomebody on 2017/4/27. */public class SingletonLSafe { private static SingletonLSafe singletonLSafe; private SingletonLSafe() {} public static SingletonLSafe getInstance(){ //创建实例后,可防止线程进入同步方法,以提高效率 if (singletonLSafe == null) { //对于一般的方法而言,使用同步代码块,可以考虑使用this //对于静态方法而言,可以使用当前类本身充当锁 synchronized (SingletonLSafe.class) { if (singletonLSafe == null) { singletonLSafe = new SingletonLSafe(); } } } return singletonLSafe; }}
0 0
- 单例模式精讲
- 单例模式精讲
- C++单例模式精讲
- 设计模式-第1讲-单例
- java设计模式 第二讲 单例模式
- JavaSE第二十五讲:单例模式详解
- 第03讲-单例模式_方法调用
- 《java与模式》----创建模式系列工厂模式、单态模式精讲
- java与模式》----创建模式系列工厂模式、单态模式精讲
- 第十二讲:模态,单例,单例模式,需求分析,框架设计
- 设计模式第六讲:单例模式(附优化方案)
- 设计模式第一讲:单例模式(IBM开发者论坛已经发表的文章)
- 设计模式精讲
- 网上看到一个讲c++单例模式的帖子,我转载过来。
- #笔记#圣思园 JavaSE 第25讲——单例模式
- java学习笔记之构造方法私有化与单例模式初讲
- 单例、单例模式
- java基础第十讲——数据库、单例设计模式、服务器、项目(数据库—服务器—网络)
- csu 1785: 又一道简单题 (没错,简单题)
- 【HDU 1007】Quoit Design(分治法)
- php中处理汉字字符串长度:strlen和mb_strlen
- Linux下regex.h知识点和使用样例
- linux 定时执行某个任务,多个时间段
- 单例模式精讲
- Linux运维笔记-文档总结- 磁盘加密与其自动挂载及加密清除
- 最常用的20条命令
- php post json参数的传递和接收处理
- JDBC连接数据库
- 软(符号)连接和硬连接
- Xlib: connection to ":0.0" refused by server Xlib: No protocol specified
- mongodb错误
- Linux第七课总结