单例模式作为23中设计模式中最基础的设计模式,一般实现方式为
①私有化构造方法
②提供一个获取对象的静态方法
除此之外,实现单例模式的方法还有很多种,这篇文章主要介绍实现单例模式的几种方法。
目录
一、懒汉式单例
二、懒汉式单例优化(双重检测锁)
三、饿汉式单例
四、静态内部类实现的饿汉式单例
五、枚举实现饿汉式单例
一、懒汉式单例
package design.singleton;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 懒汉式单例*/
public class LazySingleton {private static LazySingleton instance;private LazySingleton() { }/*** 普通懒汉式单例*/public static LazySingleton getInstance() {if (instance == null) {instance = new LazySingleton();}return instance;}}
二、懒汉式单例优化(双重检测锁)
第一种方式的代码在多线程下存在并发问题
package design.singleton;/*** 双重检测锁的懒汉式单例*/
public class LazySingleton {private static volatile LazySingleton instance;private LazySingleton() { }/*** 双重检测锁的懒汉单例* @return LazySingleton*/public static LazySingleton getInstance() {if (instance == null) {synchronized (LazySingleton.class) {if (instance == null) {instance = new LazySingleton();}}}return instance;}}
三、饿汉式单例
package design.singleton;/*** 饿汉式单例*/
public class EagerSingleton {private static EagerSingleton instance;static {instance = new EagerSingleton();}private EagerSingleton() { }public static EagerSingleton getInstance() {return instance;}}
四、静态内部类实现的饿汉式单例
package design.singleton;/*** 静态内部类的懒汉式单例* @author heyunlin* @version 1.0*/
public class InnerClassSingleton {private static class StaticInnerClassSingleton {private static StaticInnerClassSingleton singleton = new StaticInnerClassSingleton();}private InnerClassSingleton() {throw new RuntimeException();}public static StaticInnerClassSingleton getInstance() {return StaticInnerClassSingleton.singleton;}}
五、枚举实现饿汉式单例
package design.singleton;/*** 枚举实现的单例模式* @author heyunlin* @version 1.0*/
public enum EnumSingleton {Singleton;}