单例模式

单例模式

  • 立即加载(饿汉模式)

    public class MyObject{
      private static MyObject myObject = new MyObject();
      private MyObject(){}
      public static MyObject getInstance(){
          return myObject;
      }
    }
  • 延迟加载(懒汉模式)(线程不安全)

    public class MyObject{
      private static MyObject myObject = null;
      private MyObject(){}
      public static MyObject getInstance(){
          if(myObject == null){
              myObject = new MyObject();
          }
          return myObject;
      }
    }
  • DCL双检查锁机制(大多数多线程的解决方案)

    public class MyObject{
      private static MyObject myObject = null;
      private MyObject(){}
      public static MyObject getInstance(){
          if(myObject == null){
              synchronized (this.getClass()){
                  if(myObject == null){
                      myObject = new MyObject();
                  }
              }
          }
          return myObject;
      }
    }
  • 静态内置类实现单例

    public class MyObject{
      private static class MyObjectHander{
          private static MyObject myObject = new MyObject();
      }
      private MyObject(){}
      public static MyObject getInstance(){
          return MyObjectHander.myObject;
      }
    }

    通过静态内部类的静态成员在使用时才会被初始化,而且只会被初始化一次来实现。

  • 序列化与反序列化的单例实现(静态内置类)

    参考连接 主要的原因时在反序列化时,ObjectInputeStream使用反射调用了类的默认构造函数,当实现readResolve后可自定义反序列化方法

  • 使用static代码块和枚举类型enmu实现

    其实都是利用了类型都只初始化一次的特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值