前言
最近在学习设计模式,简单记录一下
一、实现方式
饿汉式、懒汉式、双重检测锁式、静态内部类式、枚举式
二、实现代码
1.饿汉式
代码如下(示例):
public class HungrySingleton { //饿汉式,线程安全 private HungrySingleton() {} private static HungrySingleton singleton = new HungrySingleton(); public static HungrySingleton getInstance() { return singleton; } }
2.懒汉式
代码如下(示例):
public class LazySingleton { //懒汉式,两种实现方式,加锁和不加锁,下面为不加锁的 private LazySingleton() {} private static LazySingleton singleton = null; public static LazySingleton getInstance() { if (singleton == null) { singleton = new LazySingleton(); } return singleton; } }
3.双重检测锁式
代码如下(示例):
public class DoubleCheckSingleton { //双重检测锁 private DoubleCheckSingleton() {} private static DoubleCheckSingleton singleton = null; public static DoubleCheckSingleton getInstance() { if (singleton == null) { synchronized (DoubleCheckSingleton.class) { if (singleton == null) { singleton = new DoubleCheckSingleton(); } } } return singleton; } }
4.静态内部类式
代码如下(示例):
public class InnerSingleton { //静态内部类式 private InnerSingleton() {} private static class SingletonHolder { //静态初始化器,由JVM保证线程安全 private static InnerSingleton singleton = new InnerSingleton(); } public static InnerSingleton getInstance() { return SingletonHolder.singleton; } }
5.枚举式
代码如下(示例):
public enum EnumSingleton { //枚举式 INSTANCE; }
总结
简单学习一下,如有问题欢迎指正~