单例模式及其优缺点
来源:互联网 发布:政府数据 编辑:程序博客网 时间:2024/05/11 01:47
单例模式分为饥汉模式和懒汉模式
在将单例模式的时候我觉得要先做一个对比,我们创建一个类,用普通的方法声明两个对象,输出两个对象的hashcode值,hashcode值不一样说明这两个对象存储在不同的物理空间。如果hashcode一样说明存储在同一个地方。
package com.soufun.test;public class A_test {public A_test(){}}测试类
package com.soufun.test;public class test {/** * @param args */public static void main(String[] args) {A_test a1 = new A_test();A_test a2 = new A_test();System.out.println(a1.hashCode());System.out.println(a2.hashCode());}}最后输出
1807500377
355165777
这两个对象的hashcode值不一样,说明这两个对象不是同一个。
我们下面再讲单例模式:
1.饥汉模式:
package com.soufun.test;/** * 饥汉模式 * @author user * */public class A_test {//私有构造方法private A_test(){}private static A_test a = new A_test(){};public static A_test getA_test(){return a;}}测试类
package com.soufun.test;public class test {/** * @param args */public static void main(String[] args) {A_test a1 = A_test.getA_test();A_test a2 = A_test.getA_test();System.out.println(a1.hashCode());System.out.println(a2.hashCode());}}最后输出
1807500377
1807500377
2.懒汉模式
package com.soufun.test;/** * 懒汉模式 * @author user * */public class A_test {//私有构造方法private A_test(){}private static A_test a = null;public static A_test getA_test(){if(a==null){a = new A_test(); }return a;}}输出:
355165777
355165777
这样就看出了使用单例模式后,以后所有引用这个对象的都是同一个对象。而不需要处处使用,就处处创建。
饥汉模式是因为我们在不需要使用这个对象的时候,只要加载这个类,它就会创建一个对象,所以叫它饥汉模式;
懒汉模式是因为只有当我们要创建这个对象的时候,它才去创建,所以叫它懒汉模式。可能理解上不太准确啊,请见谅啊。
懒汉模式和饥汉模式的好处对比
饥汉模式的优点与缺点
优点1.线程安全2.在类加载的同时已经创建好一个静态对象,调用时反应速度快缺点2.资源效率不高,可能getA_test()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化了
2.加载慢,因为一开始加载的时候就要创建一个实例
懒汉模式的优点与缺点
优点资源利用率高,不执行getA_test()就不会被实例,可以执行该类的其他静态方法。加载时非常快缺点第一次加载时不够快,多线程使用不必要的同步开销大,调用时比较慢。线程不安全。有可能创建多个实例
0 0
- 单例模式及其优缺点
- 单例模式的四种实现及其优缺点
- 单例模式的实现方法及其优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式优缺点
- 单例模式的优缺点
- 单例模式的优缺点
- 单例模式的优缺点
- 单例模式的优缺点
- 单例模式的优缺点
- 设计模式:单例模式的三种创建方式及其各自的优缺点
- 结构体 单例模式优缺点
- oracle只能用localhost登陆,不能用ip访问
- prompt() 方法,弹框带输入框
- Android中怎么启动关闭Service及功能解释
- 编程能力七段论
- 如何读懂开源程序
- 单例模式及其优缺点
- yii2Ecommerce下一步计划
- selenium2(WebDriver) API
- Eclipse安装JD-Eclipse反编译插件
- VIM配置python开发环境
- PeekMessage完美解决MFC主界面无响应
- 端口查看和开放
- Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成
- Android 系统搜寻values文件夹的顺序