关于单例模式

单例模式

  1. 简单的单例模式

    public class Student{
    private static Student mStudent=new Student();

    private Student(){
    }
    
    public static Student getStudent(){
        return mStudent;
    }   
    

    }

    这种写法最好不要。

  2. 进阶写法

    public class Student{
    private static Student instantce;

    private Student(){
    }
    
    public static synchronized Student getInstancce(){
        if(instantce == null){
            instance = new Student();
            }
        return mStudent;
    }   
    

    }

    这种相对于1肯定好很多

  3. 完善写法

    public class Student{
    private static Student instantce;
    
    private Student(){
        }
    
    public static Student getInstancce(){
        if(instantce == null){
            synchronized(Student.class){
                    if(instance == null){
                        instance = new Student();
                        }
                }
    
            }
        return mStudent;
        }   
    }
    
  4. 推荐写法

    public class Student {
    
        private Student() {
    
        }
    
        public static Student getInstance() {
            return StudentHolder.mInstance;
        }
    
        /**
         * 静态内部类
         */
        private static class StudentHolder {
            private static final Student mInstance = new Student();
        }
    
    
    }
    

    当第一次加载Student类的时候并不会初始化mInstance,只有在第一次调用Student的getInstance()方法的时候才会导致mInstance被初始化。因此,第一次调用getInsatance方法会导致虚拟机加载StudentHolder类,这种方法保证了线程安全。和对象的唯一性。,同时也延迟了单例的实例化。

  5. 枚举单例

    public enum SingletonEmun{
    
        INSTANCE;
    
        public void soSomthing(){
            System.out.println("do something");
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值