关于Android单例模式

单例模式在android开发中使用非常频繁,我们经常会在某个类中需要获取当前的Application对象,或者是之前创建的某个Activity等,单例模式提供了方便快速的获取方法,而且避免了重复创建对象实例而引起的其他错误。单例模式通常有以下四种方式:

1.饿汉模式(好奇怪的名字)

public class MyClass {

    private static final MyClass mInstance = new MyClass();

    private MyClass(){}

    public static MyClass getInstance(){

        return mInstance;

    }

}

关键点:a.构造函数私有,使得外部不能随意创建对象 b.用私有的静态变量来存储创建的实例c.用公共的静态方法返回该实例

2.懒汉模式

public class MyClass{

    private static MyClass mInstance;

    private MyClass(){}

    public static synchronized MyClass getInstance(){

        if(mInstance == null){

            mInstance = new MyClass();

        }

        return mInstance;

    }

}

这种方法与上一种的差异是添加了synchronized关键字,并且在必要的时候才创建对象实例。其实synchronized关键字的主要用途是在多线程的情况下,对代码块进行保护,因为多个线程同时对某个对象实例进行修改,会产生错误。该关键字主要是用来  简化之前的Lock/Condition方式,然而官方不建议采用这样的方式来处理加锁,而是java.util.concurrent包中的阻塞队列。该方法每次都要进行同步,也是浪费资源的。

3.二重检查锁模式

public class MyClass{

    private static MyClass mInstance = null;

    private MyClass(){}

    public static MyClass getInstance(){

        if(mInstance == null){

            synchronized(MyClass.class){

                if(mInstance == null){

                    mInstance = new MyClass();

                }

            }

        }

        return mInstance;

    }

}

这种方法只在首次创建对象实例的时候才同步锁,比上一种方法更高效一些。

4.采用静态内部类

public class MyClass{

    private MyClass(){}

    public static MyClass getInstance(){

        return MyInnerClass.mInstance;

    }

    private static class MyInnerClass{

         private static final MyClass mInstance = new MyClass();   

    }

}

这种方法只在调用getInstance()方法的时候才初始化对象实例,而且线程安全。

阅读更多
想对作者说点什么? 我来说一句

单例模式单例模式单例模式

2011年07月31日 467KB 下载

研磨单例模式研磨单例模式

2010年12月15日 123KB 下载

单例模式(讲解单例模式)

2011年01月18日 317KB 下载

Android英文论文

2017年11月24日 534KB 下载

php单例模式和工厂模式

2009年05月22日 54KB 下载

Java单例模式(DOC)

2009年10月21日 91KB 下载

关于Android触摸事件机制

2018年02月08日 49KB 下载

JAVA单例模式

2013年11月14日 46KB 下载

没有更多推荐了,返回首页

不良信息举报

关于Android单例模式

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭