您的位置:首页 > 移动开发 > Android开发

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

2017-03-28 11:20 423 查看
第一种:懒汉模式

所有的单例模式都要有一个私有的静态的本类的对象,所以开头都会写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;
}
}

这种写法,代码显得更简单;性能上更快,因为在这个类创建的时候就已经调用存在了,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: