单例模式学习笔记
来源:互联网 发布:dx9.0c修复软件 编辑:程序博客网 时间:2024/06/08 01:11
今天想把工作和生活中接触到的一些设计模式总结一下,所以就有了写篇笔记类型文章的想法。下面我就写一下单例设计模式。我是做android开发的,所以思想可能和后端的思想不一样。
一,单例设计模式的意义
单例模式,就是应用运行时,如果需要某一个单例模式的类的对象时,这个对象只能有一个,不能有多个,即不能重复创建。这样可以减少对象创建的开销,提高应用性能。
代码编写思想:构造方法私有,使外界不能使用new来创建对象;提供一个静态方法,返回一个实例对象。
二,单例模式的几种写法
1 ,饿汉式写法
// 单例模式 (饿汉式,不存在多线程同步问题,//但是假如这个类被加载时,我们并没有使用它的实例对象,//那么在内存中instance对象就是无用的创建)public class Singleton1 {private Singleton1() {}private static Singleton1 instance = new Singleton1();public static Singleton1 getInstance() { return instance; }}
2 ,懒汉式写法第一种
/** * 单例模式(懒汉式,线程不安全) */public class Singleton2 {private Singleton2() {}private static Singleton2 instance = null;public static Singleton2 getInstance() { if (instance == null) { instance = new Singleton2(); } return instance; }}
3 ,懒汉式写法第二种
/** * 单例模式(懒汉式,线程安全,效率比2低) * */public class Singleton3 { private Singleton3() { }private static Singleton3 instance = null;// 给方法加锁,避免在多线程访问的时候重复初始化。//但是在这个方法被频繁调用时,效率较低public static synchronized Singleton3 getInstance() { if (instance == null) { instance = new Singleton3(); } return instance; }}
4 ,懒汉式写法第三种
/** * 单例模式(懒汉式,线程安全,效率比3高) */public class Singleton4 { private Singleton4() {}private static Singleton4 instance = null;public static Singleton4 getInstance() { if (instance == null) { // 在此处加锁,只有在对象实例不存在时,才同步代码块, //保证多线程访问时对象在第一次被创建后不再被重复创建。 // 效率比在方法上加锁要高一些 synchronized (Singleton4.class) { if (instance == null) { instance = new Singleton4(); } } } return instance; }}
5 ,对于最后一种懒汉式写法,好像说也有一些问题,搜了搜网上的相关资料,看有一种写法是在4的写法上把instance对象用volatile修饰下。
// volatile修饰的变量在线程每次使用的时候都会读取变量修改后的最后的值// volatile很容易被误用,用来进行原子性操作private static volatile Singleton5 instance = null;
三,总结
上面写了共计五种单例模式的写法,其中饿汉式一种,懒汉式四种。单例模式在代码编写方面大名鼎鼎,面试什么的好像提问几率很高,不过这个好像也是以前的事了,最近一段时间面试问的问题好像都更深了。写了写单例模式,忽然想不起我们项目中那里用到了单例模式,翻了翻代码,看到好像只有User类用到了,用的还是饿汉式。好吧,记个笔记,以谋将来。
0 0
- 学习笔记:单例模式
- 学习 单例模式 笔记
- 单例模式学习笔记
- 单例模式-->学习笔记
- 单例模式学习笔记
- 单例模式学习笔记
- 单例模式学习笔记
- 单例模式学习笔记
- 学习笔记单例模式
- 单例模式学习笔记
- 【学习笔记】单例模式
- 设计模式学习笔记:单例模式
- 设计模式学习笔记-单例模式
- 设计模式学习笔记--单例模式
- 设计模式学习笔记-单例模式
- 设计模式学习笔记-单例模式
- 设计模式学习笔记--单例模式
- 设计模式--单例模式学习笔记
- GreeoDao的学习使用
- js基础03特效简单响应式页面布局client()函数封装
- 浅谈JavaScript模块化规范AMD与CMD
- VTK图形处理之vtkTriangleFilter
- 05字符串格式化
- 单例模式学习笔记
- 面试题:随机数生成、蓄水池抽样、海量数据、设计秒杀系统
- webpack2.x基础属性讲解(一)
- "尚学堂杯"哈尔滨理工大学第七届程序设计竞赛 G.Great Atm(二进制,位运算)
- 61. Rotate List
- linux/android进程的模块信息获取
- servlet的运行过程
- java NIO详解
- Jsp中JavaBean的用法