Java的单例模式(singleton)

Posted SimenLiang

tags:

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

为什么需要单例?只因为国家的独生子女政策(当然现在可以生2个)

单例是一个很孤独的物种,因为它的类里面做多只有也仅只有它一个。

常见的是懒汉及饿汉模式,

1.懒汉,为什么这么叫,看看英文,原为lazy loading,lazy(懒惰的),laoding(音如同佬),叫懒佬,然后一个佬==一条汉子,为好听,故懒汉。

最基础的懒汉模式:

//单例模式
public class Singleton {
	
	// 私有化构造方法,使得外部不可能有由new产生实例;
	private Singleton() {
	}

	// 懒汉模式
	private static Singleton instance = null;
	//不加synchronized,线程有问题;
	public static Singleton getInstance() {
		if (instance == null)
		instance = new Singleton();
		return instance;
	}

}

 上面有线程安全的问题,如果多线程情况下,可以得出多个实例。

加入synchronized 改进后:

//单例模式
public class Singleton {
    
    // 私有化构造方法,使得外部不可能由用new产生实例;
    private Singleton() {
    }

    // 懒汉模式
    private static Singleton instance = null;    //不加synchronized,线程有问题;
    public static synchronized Singleton getInstance() {
        if (instance == null)
        instance = new Singleton();
        return instance;
    }

}

懒,因为用到了才加载。

 

饿汉,汉就不解释,上面有。为什么叫饿?因为不管你有没使用这个单例,它都会实例化,在内存中,好像一个很饥饿的人,不管什么,先吃了再说。

具体如下:

//饿汉模式
public class Singleton2 {
	//私有化构造方法,使得外表不能用new产生一个实例。
	private Singleton2(){}
	//饿汉模式,不管你有没用这个实例,先实例化。
	private static Singleton2 instance =new Singleton2();
	public static Singleton2 getInstance(){
		return instance;
	};

}

 

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

Java中的单例模式(Singleton Pattern in Java)

Java中的单例模式

Java面向对象--单例(Singleton)设计模式和main方法

Java的单例模式实现

如何对枚举类型实现的单例模式进行mock

单例模式---singleton