Android设计模式-单例模式(Singleton Pattern)
来源:互联网 发布:日本经济数据 编辑:程序博客网 时间:2024/05/28 11:50
定义
一个类有且仅有一个实例,并且自行实例化向整个系统提供。
特点
1.单例类只能有一个实例。
2.单例类必须自己创建自己的唯一实例。
3.单例类必须给所有其他对象提供这一实例。
实现方式
1.饿汉式
public class Singleton { private static Singleton mInstance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return mInstance; }}
使用:
Singleton instance = Singleton.getInstance();
优点:线程安全
缺点:没有懒加载(在类加载时就实例化了而不是在用到这个实例时)
2.懒汉式
2.1懒汉式一(不推荐使用)
public class Singleton { private static Singleton mInstance; private Singleton() { } public static Singleton getInstance() { if (mInstance == null) { mInstance = new Singleton(); } return mInstance; }}
优点:懒加载
缺点:线程不安全
2.2懒汉式二_同步锁(不推荐使用)
public class Singleton { private static Singleton mInstance; private Singleton() { } public static synchronized Singleton getInstance() { if (mInstance == null) { mInstance = new Singleton(); } return mInstance; }}优点:懒加载、线程安全
缺点:效率低(每次调用getInstance方法都要同步,造成不必要的同步开销)
2.3懒汉式三_双重检查锁(Double Check Lock)
public class Singleton { private volatile static Singleton mInstance; private Singleton() { } public static Singleton getInstance() { if (mInstance == null) { synchronized (Singleton.class) { if (mInstance == null) { mInstance = new Singleton(); } } } return mInstance; }}优点:懒加载、线程安全
缺点:第一次加载时反应稍慢(同步锁),也由于Java内存模型的原因偶尔失败。
3.静态内部类
public class Singleton { private Singleton() { } private static class SingletonHolder { private static Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.instance; }}
优点:懒加载、线程安全
缺点:待补充
原理:第一次调用getInstance方法时JVM加载SingletonHolder类,从而完成instance的初始化。
4.枚举
public enum Singleton { INSTANCE; private Singleton() { } public void method() { }}
使用:
Singleton.INSTANCE.method();
优点:线程安全、防反序列化
缺点:JDK1.5及以上
原理:默认枚举的创建是线程安全的,并且在任何情况下它都是一个单例。
总结
根据项目实际需要选择单例实现方式,推荐4.枚举>3.静态内部类>2.3懒汉式三_双重检查锁>1.饿汉式。
参考
《Android源码设计模式》
http://blog.csdn.net/dmk877/article/details/50311791
http://www.cnblogs.com/whoislcj/p/5543932.html
0 0
- Android设计模式-单例模式(Singleton Pattern)
- Android设计模式之单例模式(Singleton Pattern)
- 设计模式 - Singleton Pattern(单例模式)
- 设计模式 - Singleton Pattern(单例模式)
- 设计模式-单例模式(Singleton Pattern)
- 设计模式 -- 单例模式 Singleton Pattern
- 设计模式-单例模式(singleton pattern)
- 设计模式--单例模式【Singleton Pattern】
- 设计模式 单例模式(Singleton Pattern)
- 【设计模式】Singleton Pattern 单例模式
- 设计模式--单例模式(Singleton Pattern)
- 设计模式【单例模式Singleton Pattern】
- 设计模式(一):单例模式(Singleton Pattern)
- AS3设计模式之一:单例模式(Singleton Pattern)
- 设计模式4:Singleton Pattern (单例模式)
- 深入浅出设计模式-005:单例模式(Singleton Pattern)
- 设计模式-单例模式(Singleton Pattern)
- 设计模式笔记7:单例模式(Singleton Pattern)
- 博客编辑神器:Markdown编辑器
- 如何利用已有的切片文件生成TPK
- DecimalFormat的使用
- 程序与自动机及静态分析杂想
- 封装JSONUtils工具类及使用
- Android设计模式-单例模式(Singleton Pattern)
- Python模块中的变量和函数的作用域
- statusbar相关
- linux汇编语法
- opencv2读取摄像头并保存为视频
- App Webview与内嵌web交互实现
- 登录过滤器(Struts2)
- 开始
- Java多线程——sleep()和wait()的区别