单例模式

文章目录

          • 1 单例模式解析
          • 2 常见实现方式
            • 2.1 饿汉式
            • 2.2 懒汉式
            • 2.3 双重检测锁式
            • 2.4 静态内部类式
            • 2.5 枚举单例

参考资料

1 单例模式解析

单例模式的定义就是:确保某一个类只有一个实例,并且提供一个全局访问点


单例模式的三个特点:

  • 只有一个实例
  • 自我实例化
  • 提供全局访问点

单例模式的优缺点:

  • 优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问
  • 缺点:也正是因为系统中只有一个实例,导致了 单例类的职责过重,违背了"单一职责原则",同时也没有抽象类,这样扩展起来有一定的困难

实现方法

  • 构造函数私有化
  • 创建一个 类对象
  • 提供一个公有的 静态方法 可以 获取本类对象

2 常见实现方式
2.1 饿汉式
// 饿汉式
public class EagerSingleton {

    private static EagerSingleton instance = new EagerSingleton();

    private EagerSingleton(){
    }

    private static EagerSingleton getInstance(){
        return instance;
    }

}
2.2 懒汉式
// 线程不安全
public class LazySingleton {

    private static LazySingleton instance = null;

    private LazySingleton(){
    }

    // 运行时加载对象
    public static LazySingleton getInstance(){
        if(instance == null){
            instance = new LazySingleton();
        }
        return instance;
    }

}
2.3 双重检测锁式
// 双重检查加锁
public class DoubleCheckSyncSingleton {

    private volatile static DoubleCheckSyncSingleton instance = null;

    private DoubleCheckSyncSingleton(){
    }

    public static DoubleCheckSyncSingleton getInstance(){
        if(instance == null){
            synchronized (DoubleCheckSyncSingleton.class){
                if(instance == null){
                    instance = new DoubleCheckSyncSingleton();
                }
            }
        }
        return instance;
    }
}
2.4 静态内部类式
public class StaticSingleton {

    private static class StaticSingletonHolder{
        // 静态初始化器,由 JVM 来保证线程安全
        private static StaticSingleton instance = new StaticSingleton();
    }

    private StaticSingleton(){
    }

    public static StaticSingleton getInstance(){
        return StaticSingletonHolder.instance;
    }

}
2.5 枚举单例
public enum EnumSingleton {

    uniqueInstance; // 定义一个枚举元素,它就代表了 EnumSingleton的一个实例

    public void enumSingletonOperation(){
        System.out.println("功能处理");
    }
}

你可能感兴趣的:(设计模式)