欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

单例模式的四种推荐方式

程序员文章站 2022-06-19 08:45:48
静态内部类的特点:1)当外部类Singleton进行类装载时,静态内部类是不会被装载的2)当调用Singleton的getInstance()方法,用到了静态变量INSTANCE时,静态类才会被装载,且只会装载一次。在装载时,线程是安全的。class Singleton{private Singleton() {}//写一个静态内部类,该类中有一个静态属性Singleton//jvm机在装载类的时候是线程安全的private static class SingletonInsta...

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(这种方法一般是静态方法)。

一、饿汉式

class Singleton{
	//1.构造器私有化:外部不能new
	private Singleton() {}
	
	//2.在本类内部创建对象实例
	private final static Singleton instance = new Singleton();
	
	//3.对外提供一个公有的静态方法,返回实例对象
	public static Singleton getInstance() {
		return instance;
	}
}

二、懒汉式

双重检查法

public class DoubleCheckInstance(){

	private DoubleCheckInstance(){};

	private static volatile DoubleCheckInstance instance;

	public DoubleCheckInstance getInstance(){
		if (instance != null) {
			Synchronize(DoubleCheckInstance.class){
				if (intance != null) {
					intance = new DoubleCheckInstance();
				}
			}
		}
		
	}

}

三、静态内部类

静态内部类的特点:
1)当外部类Singleton进行类装载时,静态内部类是不会被装载的
2)当调用Singleton的getInstance()方法,用到了静态变量INSTANCE时,静态类才会被装载,且只会装载一次。在装载时,线程是安全的。

class Singleton{	
	private Singleton() {}
	
	//写一个静态内部类,该类中有一个静态属性Singleton
	//jvm机在装载类的时候是线程安全的
	private static class SingletonInstance{
		private static final Singleton INSTANCE = new Singleton7();
	}
	
	//提供一个静态的公有方法,直接返回Singleton7Instance.INSTANCE
	public static Singleton getInstance() {
		return SingletonInstance.INSTANCE;
	}
}

四、枚举类

/**
 * 推荐使用枚举实现单例模式,这是effective java 作者推荐的一种方式,很简洁。
 */
public enum SingletonEnumDemo {
    INSTANCE;//属性(只有一个属性,就保证了是单例)
}

本文地址:https://blog.csdn.net/weixin_43221207/article/details/109909661