Android单例模式的三种写法个人总结

第一种:懒汉模式


所有的单例模式都要有一个私有的静态的本类的对象,所以开头都会写private static 类名 对象;

然后还有一个就是都要有一个私有的的构造方法;是为了防止外部调用的时候进行初始化;这样就确保了只有在调用的时候;自己控制初始化;

接下来就要写一个公共的方法;里面要嵌套这个类的初始化的方式了;


public class Singleton {
    private static Singleton singleton;

    private Singleton() {

    }

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

所以现在来分析上面的单例模式,其他的两个方式都差不多相同,在这个初始化类的的时候,要进行判断是否有这个对象的存在,如果没有,加一个同步锁,以防止多线程的时候调用多个对象出来,然后在进行一次判断,是不是为空,为空就创建一个新的对象,并返回这个对象;

第二种;懒汉式;

public class TwoSingle {
    //静态内部类
    //静态内部类特点:使用时候才加载;即只有第一次使用时候才会加载
    //此种方法既实现了线程安全;又避免了同步带来的性能影响
    private static class LazyHolder {
        private static final TwoSingle INSTANCE = new TwoSingle();
    }

    private TwoSingle() {

    }

    public static TwoSingle getIntanstance() {
        return LazyHolder.INSTANCE;
    }
}
这个懒汉式的写法,是李永乐静态内部类的特点;使用的时候才架子啊;即只有第一次使用的时候才会加载

这样既可以实现线程安全;有避免了同步带来的性能的影响

第三种:饿汉式

public class Single {
    //恶汉模式与懒汉模式对比;
    //线程安全方面;
    //恶汉模式天生就是线程安全;可以直接用于多线程而不会出现问题
    //懒汉模式本事是非线程安全的 ;为了实现线程安全才会出现前面的几种方式
    //资源加载和性能;
    //恶汉在类创建的同事就实例化一个静态对象出来;不管以后是佛会使用这个单利;都会占据一定的内存;
    //但是这样速度就快了
    //懒汉式会延迟加载;在第一次使用该单利的时候才会实例化对象出来
    //第一次调用时要做初始化;如要做的工作比较多,性能上还有延迟

    private static final Single INSTANCE = new Single();

    private Single() {

    }

    public static Single getInstance() {
        return INSTANCE;
    }
}
这种写法,代码显得更简单;性能上更快,因为在这个类创建的时候就已经调用存在了,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值