1、单例模式(Singleton)

  • 保证一个类仅有一个实例,并提供一个访问它的全局访问点
    • 构造方法私有化
    • 声明一个本类的对象
    • 给外部提供一个静态方法获取对象实例
  • 两种实现方式
    • 饿汉式
    • 懒汉式
  • 单例模式使用场景:一般作为工具类频繁使用,并且没有属性,主要是方法

    2、饿汉式

    ``` public class Single {

    // 私有的构造方法 private Single(){}

    // 私有的静态实例 private static Single single = new Single();

  1. // 公开的静态方法,返回静态实例
  2. public static Single getInstance(){
  3. return single;
  4. }

}

  1. <a name="DaRvl"></a>
  2. ## 3、懒汉式

public class Single {

  1. // 私有的构造方法
  2. private Single(){}
  3. // 私有的静态实例
  4. private static Single single = null;
  5. // 公开的静态方法,返回静态实例
  6. public static Single getInstance(){
  7. if (single == null) {
  8. single = new Single();
  9. }
  10. return single;
  11. }

}

  1. <a name="tPmGZ"></a>
  2. ## 4、单例的线程安全

public class Single {

  1. //构造方法必须私有,外部不可以访问
  2. private Single(){
  3. }
  4. //私有的静态对象属性
  5. private static Single instance;
  6. // 公开 静态 返回当前类 的方法
  7. public static Single getInstance(){
  8. if (instance == null){//多线程调用,10个进入
  9. synchronized (Single.class){//10个排队
  10. if (instance == null){//第一个为null,进入,其他判断不为空
  11. instance = new Single();
  12. }
  13. }
  14. }
  15. return instance;
  16. }

}

  1. <a name="FYdey"></a>
  2. ## 5、枚举单例

public enum Single {

  1. INSTANCE;
  2. public static Single getInstance() {
  3. return INSTANCE;
  4. }

} ```