单例设计模式记录

一、懒汉式:

1,线程不安全

public class Singleton {

  private static Singleton instance;
  private Singleton(){};

  public static Singleton getInstance(){
      if (instance == null)
      {
          instance = new Singleton();
      }
      return instance;
  }
}

2,线程安全

public class Singleton {

  private static Singleton instance;
  private Singleton(){};

  public static Singleton getInstance(){
      if (instance == null)
      {
          synchronized (Singleton.class)
          {
              if (instance == null)
              {
                  instance = new Singleton();
              }
          }
      }
      return instance;
  }
}

 

二、饿汉式:

public class Singleton {

  private static Singleton instance = new Singleton();
  private Singleton(){};

  public static Singleton getInstance(){
      return instance;
  }
}

三,来客登记模式

/**
 * Created by changquan on 2018/7/17.
 * 登记模式是对多个单例类进行管理的一种方法
 */
 class SingletonManage {
    private static Map singletonMap = new HashMap();

  /**
   * 有该单例的实例存在就直接返回;没有改实例就先创建该实例在返回
   * @author changquan
   * @param className 传入的类名
   * @retrun
   */
  public static Object getInstance(String className){
      if (!singletonMap.containsKey(className))
      {
          try {
              singletonMap.put(className, Class.forName(className).newInstance());
          } catch (InstantiationException e) {
              e.printStackTrace();
          } catch (IllegalAccessException e) {
              e.printStackTrace();
          } catch (ClassNotFoundException e) {
              e.printStackTrace();
          }
      }
      return singletonMap.get(className);
  }

}

四,改进型的懒汉式(线程安全)

/**
 * Created by changquan on 2018/7/17.
 * 改进型的懒汉式(线程安全)
 * 原理:使用静态内部类来初始化实例,静态内部类只有当被调用的时候才开始初始化
 */
public class Singleton {

    private Singleton(){};

    private static class SingletonBuild{
        private static Singleton instance = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonBuild.instance;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值