首页 > 代码库 > 单例模式
单例模式
全局变量和单例模式的区别:
1. 全局变量是对一个对象的静态引用,不能保证只有一个实例;
2. 过多全局变量造成代码难读,命名空间污染;
3. 全局变量不能实现继承;
饿汉模式:在类加载时就实例化类的一个对象
package Singleton; public class EagerSingleton { //饿汉单例模式 //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快 private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化 private EagerSingleton() { //私有构造函数 } public static EagerSingleton getInstance() //静态,不用同步(类加载时已初始化,不会有多线程的问题) { return instance; } }
懒汉模式:在需要的时候再创建对象。
package Singleton; public class LazySingleton1 { //懒汉式单例模式 //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢 private static LazySingleton1 instance = null;//静态私用成员,没有初始化 private LazySingleton1() { //私有构造函数 } public static synchronized LazySingleton1 getInstance() //静态,同步,公开访问点 { if(instance == null) { instance = new LazySingleton1(); } return instance; } } class LazySingleton2 { private static volatile LazySingleton2 instance = null;//静态私用成员,没有初始化 private LazySingleton2() {} public static LazySingleton2 getInstance() { //静态,同步,公开访问点 if(instance == null){ synchronized(LazySingleton2.class){ if(instance == null){ instance = new LazySingleton2(); } } } return instance; } }
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。