Android开发中常见的设计模式——单例模式

Posted xl_phoenix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发中常见的设计模式——单例模式相关的知识,希望对你有一定的参考价值。

首先了解一些单例模式的概念。

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

这样做有以下几个优点

  • 对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中。
  • 保持程序运行的时候该中始终只有一个实例存在内存中

其实单例有很多种实现方式,但是个人比较倾向于其中1种。可以见单例模式

代码如下

public class Singleton {
    private static volatile Singleton instance = null;

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

要保证单例,需要做一下几步

  • 必须防止外部可以调用构造函数进行实例化,因此构造函数必须私有化。
  • 必须定义一个静态函数获得该单例
  • 单例使用volatile修饰
  • 使用synchronized 进行同步处理,并且双重判断是否为null,我们看到synchronized (Singleton.class)里面又进行了是否为null的判断,这是因为一个线程进入了该代码,如果另一个线程在等待,这时候前一个线程创建了一个实例出来完毕后,另一个线程获得锁进入该同步代码,实例已经存在,没必要再次创建,因此这个判断是否是null还是必须的。

而在android中,很多地方用到了单例。比如EventBus中的单例

private static volatile EventBus defaultInstance;
public static EventBus getDefault() {
    if (defaultInstance == null) {
        synchronized (EventBus.class) {
            if (defaultInstance == null) {
                defaultInstance = new EventBus();
            }
        }
    }
    return defaultInstance;
}

以上是关于Android开发中常见的设计模式——单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常见的设计模式:单例模式

使用单例模式造成的内存泄漏

Android与设计模式——单例(Singleton)模式

设计模式:Android源码中的单例模式

[Unity设计模式与游戏开发]单例模式

[Unity设计模式与游戏开发]单例模式