Android中单例模式的多种写法

1.单例模式1:

懒汉式:用到时再去构建对象,否则就不构建

应用场合:大对象(占用空间教大时),稀少用:

class PersonDemo01{
    private static PersonDemo01 person;
    private PersonDemo01(){}
    /*int n[]=new int[10000];
     //构建对象的时候存在,此时就不能用小对象来形容*/
    public static PersonDemo01 getInstance() {
        if (person==null) {
            synchronized (PersonDemo01.class) {
                if (person==null) {
                    person=new PersonDemo01();
                }
            }
        }
        return person;
    }
}

2.单例模式2:

饿汉式:无论是否用到对象,都构建对象

应用场合:小对象,频繁用

class PersonDemo02{

//加载类就是将类读到内存(代码区)
    private PersonDemo02(){}
    private static PersonDemo02 person=new PersonDemo02();

//类加载时构建对象
    public static PersonDemo02 getInstance() {
        return person;
    }
}

3.单例模式改进:内部类的写法:

class PersonDemo03{
    private PersonDemo03(){}
    static class Inner{
//静态内部类,相当于一个外部类,内部类的对象不依托于外部类对象而存在
        public static PersonDemo03 person=new PersonDemo03();
    }
    public static PersonDemo03 getInstance() {
        return Inner.person;
    }
}

4.枚举:饿汉单例

enum PersonDemo04{
    INSTANCE;//实例(类加载时创建)
    public static void show(){}
    public void  display() {}
    private PersonDemo04(){}//枚举类的构造方法默认是private的
}

5.线程内部单例:一个线程一份某个类的实例,借助ThreadLocal类实现

class PersonDemo05{
    private PersonDemo05(){}
    private static ThreadLocal<PersonDemo05> threadLocal=new ThreadLocal<>();
    //底层是map
    public static PersonDemo05 getInatance() {
        //1.从当前线程获取实例
        PersonDemo05 person=threadLocal.get();
        //2.当前线程没有就创建实例
        if (person==null) {
            person=new PersonDemo05();
        }
        //3.创建实例后绑定到当前线程
        threadLocal.set(person);//put(key,value)
        
        return person;
    }
}

这基本就是初学者用到的单例模式,写到这里小妞就先撤了





















                  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值