单例模式

Posted 贾斯彼迭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

全局变量和单例模式的区别:

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;
	}
}

    

  

 

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块