Android单例模式的三种写法个人总结
2017-03-28 11:20
423 查看
第一种:懒汉模式
所有的单例模式都要有一个私有的静态的本类的对象,所以开头都会写private static 类名 对象;
然后还有一个就是都要有一个私有的的构造方法;是为了防止外部调用的时候进行初始化;这样就确保了只有在调用的时候;自己控制初始化;
接下来就要写一个公共的方法;里面要嵌套这个类的初始化的方式了;
所以现在来分析上面的单例模式,其他的两个方式都差不多相同,在这个初始化类的的时候,要进行判断是否有这个对象的存在,如果没有,加一个同步锁,以防止多线程的时候调用多个对象出来,然后在进行一次判断,是不是为空,为空就创建一个新的对象,并返回这个对象;
第二种;懒汉式;
这个懒汉式的写法,是李永乐静态内部类的特点;使用的时候才架子啊;即只有第一次使用的时候才会加载
这样既可以实现线程安全;有避免了同步带来的性能的影响
第三种:饿汉式
这种写法,代码显得更简单;性能上更快,因为在这个类创建的时候就已经调用存在了,
所有的单例模式都要有一个私有的静态的本类的对象,所以开头都会写private static 类名 对象;
然后还有一个就是都要有一个私有的的构造方法;是为了防止外部调用的时候进行初始化;这样就确保了只有在调用的时候;自己控制初始化;
接下来就要写一个公共的方法;里面要嵌套这个类的初始化的方式了;
public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getInstance() { if (null == singleton) { synchronized (Singleton.class) { if (null == singleton) { singleton = new Singleton(); } } } return singleton; } }
所以现在来分析上面的单例模式,其他的两个方式都差不多相同,在这个初始化类的的时候,要进行判断是否有这个对象的存在,如果没有,加一个同步锁,以防止多线程的时候调用多个对象出来,然后在进行一次判断,是不是为空,为空就创建一个新的对象,并返回这个对象;
第二种;懒汉式;
public class TwoSingle { //静态内部类 //静态内部类特点:使用时候才加载;即只有第一次使用时候才会加载 //此种方法既实现了线程安全;又避免了同步带来的性能影响 private static class LazyHolder { private static final TwoSingle INSTANCE = new TwoSingle(); } private TwoSingle() { } public static TwoSingle getIntanstance() { return LazyHolder.INSTANCE; } }
这个懒汉式的写法,是李永乐静态内部类的特点;使用的时候才架子啊;即只有第一次使用的时候才会加载
这样既可以实现线程安全;有避免了同步带来的性能的影响
第三种:饿汉式
public class Single { //恶汉模式与懒汉模式对比; //线程安全方面; //恶汉模式天生就是线程安全;可以直接用于多线程而不会出现问题 //懒汉模式本事是非线程安全的 ;为了实现线程安全才会出现前面的几种方式 //资源加载和性能; //恶汉在类创建的同事就实例化一个静态对象出来;不管以后是佛会使用这个单利;都会占据一定的内存; //但是这样速度就快了 //懒汉式会延迟加载;在第一次使用该单利的时候才会实例化对象出来 //第一次调用时要做初始化;如要做的工作比较多,性能上还有延迟 private static final Single INSTANCE = new Single(); private Single() { } public static Single getInstance() { return INSTANCE; } }
这种写法,代码显得更简单;性能上更快,因为在这个类创建的时候就已经调用存在了,
相关文章推荐
- android mvp模式 总结及个人心得
- 复习Android,Activity的启动模式——个人总结归纳
- [note]Android按钮单击事件的三种常用写法总结
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- 个人开发总结分享:Android学习及如何利用android来赚钱
- Android的三种特殊模式的进入方法
- C#单例模式的三种写法
- Android开发环境配置的个人总结,也许对某些RP像我一样低的童鞋有帮助
- Android开发之onClick事件的三种写法
- 个人总结--Android 应用开发中国大学生挑战赛
- Android情景模式、文件管理器 完整示例编程详解、Android程序优化总结
- android解析XML总结(SAX、Pull、Dom三种方式)
- VMware 三种网络模式总结
- android解析XML总结(SAX、Pull、Dom三种方式)
- 一个android个人开发者的总结
- 个人开发总结分享:Android学习及如何利用android来赚钱
- WPF中的MVVM模式:View与ViewModule的交互个人总结
- 单例模式的三种写法
- Handle Android Out of memory exception (个人总结的如何应对Android内存不足)
- [推荐] 一个android个人开发者的总结[问题点数:40分]