Singleton mode-several implementation methods


package singletonPattern;
/**
 * Title: Singleton1 Description:
 * 饿汉式:直接创建实例,不管你是否需要这个对象 
 * (1)构造器私有化 
 * (2)自行创建实例,用静态变量来保存 
 * (3)向外提供这个实例
 * (4)强调这是一个单例,可以用final来修饰
 * @author zhangshuai
 * @date 2019-06-16 17:45
 **/
public class Singleton1 {
	public static final Singleton1 INSTANCE = new Singleton1();
	// 构造器私有化
	private Singleton1() {

	}
	// 实例的方法
	public void method() {
		System.out.println("单例模式:饿汉式,调用单例的方法!");
	}
}
package singletonPattern;

/**   
* Title: Singleton2   
* Description:    
* @author zhangshuai   
* @date 2019-06-16 17:53
**/
/**
 * 枚举类型,标识该类型的对象是有限的几个, 我们可以限定为一个,就成了单例模式
 */
public enum Singleton2 {
	INSTANCE;
	// 实例的方法
	public void method() {
		System.out.println("枚举类型,调用单例的方法!");
	}
}
package singletonPattern;

/**
 * Title: Singleton3 Description:
 * 
 * @author zhangshuai
 * @date 2019-06-16 17:56
 **/
// 懒汉式
public class Singleton3 {
	// 静态变量保存这个单例,这里不能用public
    private static Singleton3 instance;

	// 构造器私有化
	private Singleton3() {
	}
    //注意synchronized
	public static synchronized Singleton3 getInstance() {
		if (instance == null) {
			instance = new Singleton3();
		}
		return instance;
	}

}
package singletonPattern;

/**   
* Title: Singleton   
* Description:    
* @author zhangshuai   
* @date 2019-06-16 18:43
**/
/**
 * 在内部类被加载时,才创建INSTANCE实例对象。
 * 静态内部类不会自动随着外部类的加载和初始化而初始化,它要单独加载和初始化。
 * 因为是在内部类加载和初始化时创建的,因此是线程安全的。
 */
public class Singleton6 {
	private Singleton6() {
	}

	// 静态内部类
	private static class Inner {
		private static final Singleton6 INSTANCE = new Singleton6();
	}

	public static Singleton6 getInstance() {
		return Inner.INSTANCE;
	}
}

 

Guess you like

Origin blog.csdn.net/qq_36073688/article/details/92418787