单例模式下的对象如何创建

要求对象有且只有一个

目标:

保证多线程安全
懒加载-->延时加载:什么时候需要什么时候加载对象
执行效率高!内存消耗低

如何创建单例模式?

  1. 将构造方法私有化
  2. 在类的内部定义静态对象
  3. 对外提供静态的公共方法

单例模式特点:

  1. 有且只有一个对象
  2. 只能是自己创建对象
  3. 给外部其他的对象提供自己创建的唯一的实例

单例模式下创建对象,调用类里面的静态方法创建对象:

public class UserInforTest {
   public static void main(String[] args) {
        UserInfor userInfor=UserInfor.getInstance();
   }
}

如何实现单例模式:

不推荐的方式:

  1. 懒汉式加载:效率比较慢
public class UserInfor {
    private static UserInfor instance;
    private UserInfor() {
    }
    public static synchronized UserInfor getInstance(){
        if(instance==null){
            instance=new UserInfor();
        }
        return instance;
    }
}
  1. 饿汉式:会造成资源浪费
public class EHance {
    private static final EHance E_HANCE=new EHance();//类加载的时候,也会被加载
    private  EHance(){

    }
    public static EHance geteHance(){
        return E_HANCE;
    }
}

推荐的方式:

  1. 双层校验
public class UserInfor1 {
    private static UserInfor1 instance;

    private UserInfor1() {
    }

    public static UserInfor1 getInstance() {
        if (instance == null) {
            synchronized (UserInfor.class) {//保证多线程下安全
                if (instance == null) instance = new UserInfor1();
            }

        }
        return instance;
    }
}
  1. 静态内部类
public class EHance2 {
    private EHance2(){

    }
    //在调用的时候内部类,对象才会被创建
    private static class EHanceCreate{
        private static final EHance2 E_HANCE=new EHance2();
    }
    public static EHance2 geteHance(){
        return EHanceCreate.E_HANCE;
    }
}
posted @ 2022-11-23 10:42  Liku007  阅读(187)  评论(0编辑  收藏  举报