android-设计模式-单例模式(干货)
来源:互联网 发布:网络投稿小说网站 编辑:程序博客网 时间:2024/06/04 00:28
本文参考《源码解析设计与实战》
1.饿汉式
public class Singleton{private static final Singleton instance=new Singleton();private Singleton(){}public static Singleton getinstance(){ return instance } }优点:可以创建唯一实例 缺点:1.可以通过反序列化创建实例 2.加载类时就会被实例化,浪费资源总结:可以使用
2.懒汉式
private static final Singleton instance;private Singleton(){}public static synchronized Singleton getinstance(){ if(instance==null){ instance=new Singleton(); } return instance } }优点:线程安全缺点:第一加载反应慢 每次调用getInstance都要同步 造成不必要的开销 总结:这种模式一般不建议使用
3.Double Check Lock(DCL) 双重检查锁定
public class Singleton{private static final Singleton instance=null;private Singleton(){}public static Singleton getinstance(){ if(instance==null){//避免不必要的同步 synchronized(Singleton.class){ if(instance==null){//创建实例 instance=new Singleton(); } } } return instance } } 优点:1.资源利用率高 2.解决多余同步 3.线程安全 缺点:1.第一次加载反应慢 2.低于JDK6版本偶尔失败(极少,被称作双城检查失效) 3.可以通过反序列化创建实例 解决缺点3:在JDK1.5之后 将 private volatile static Singleton instance=null;可以确保单例的创建成功,但是volatile 会影响一定的性能,但是为了确保稳定性 牺牲这点还是值得的。 总结:一般满足需求
4.静态内部类单例模式
public class Singleton{ private Singleton(){}private static Singleton getInstance(){ return SingletonHolder.sInstance; }private static calss SingletonHolder{ private static final Singleton sInstance=new Singleton(); }}优点:加载类是不会初始化单例,调用单例方法是才会被初始化 1.确保线程安全 2.保证单例对象唯一 缺点:可以通过反序列化创建实例 总结:推荐使用
5.枚举单例
public enum SingletonEnum{ INSTANCE; }优点:1.线程安全 2.创建单例成功 3.不会被反序列化创建实例
6.总结
无论以哪种形式实现单利模式,核心都是将构造函数私有化,然后通过静态方法获取唯一的实例,过程中要确保线程安全,防止反序列化造成再生实例等问题。使用单利模式时要结合项目本身,例如时候是复杂的开发环境,JDK版本是否过低一级单例对象的资源消耗等。(推荐方式3,4,5)
0 0
- android-设计模式-单例模式(干货)
- Android设计模式 单例模式(枚举单例)
- Android设计模式 单例模式(饿汉模式)
- Android设计模式 单例模式(懒汉模式)
- Android设计模式 单例模式(Double CheckLock模式)
- Android设计模式---单例
- Android单例设计模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- Android 设计模式之单例模式
- Android 设计模式 之 单例模式
- Android设计模式系列-单例模式
- Android 设计模式 之 单例模式
- Java(Android)设计模式-单例模式
- Android设计模式--单例模式
- android设计模式之单例模式
- Android设计模式系列-单例模式
- Android 设计模式 之 单例模式
- 【PS】绘制金属质感圆按钮
- ListView快速滑动时不加载图片
- 你真的了解单例模式吗?你真的认为单例模式很简单吗? 第二篇
- 汇编语法详解
- Linux之进程的了解
- android-设计模式-单例模式(干货)
- List集合中去除重复元素
- JQ选择器
- 使用OpenCV实现简单的移动物体检测和追踪
- SVG-Android开源库——图片颜色Manage、Tint及Selector扩展
- 紫越移动校园建设方案
- java成员变量的使用
- 带有上拉加载下拉刷新和可滑动删除功能的ListView的简单实现
- HDU 5521 2015ACM-ICPC沈阳赛区现场赛M题