Android之单例设计模式浅析

对于程序员来说,好的编码设计模式能大大提高软件的性能,尤其在java语言中,是因为其内存回收机制跟C++完全不一样,它依赖于JVM的“垃圾回收机制”。在java中,一切皆对象,每当我们new一个对象时就在内存空间中分配了一定的内存空间,所以我们要尽可能少new对象,这样才能减少内存空间的浪费。
单例设计模式就是保证类有且仅有一个实例,这种模式很好的用于android应用开发中。单例设计模式分为懒汉式和饿汉式两种,这两种有啥区别呢?
懒汉式是每当要用到的时候才会实例化,而饿汉式是当类加载的时候就已经实例化了,从这方面看,懒汉式更节省空间。
下面我们分别给出懒汉式和饿汉式的两种写法:
1、懒汉式

/**
 * 单例设计模式之懒汉式
 */
public class LazySingleton {
    private LazySingleton(){}

    private LazySingleton instance = null; //先不建立对象

    //写法一
//  public  LazySingleton getInstance(){
//      if(instance==null){ //先判断是否这空
//          instance = new LazySingleton();  //懒汉式做法
//      }
//      return instance;
//  }

    //写法二 同步加锁防止多线程访问时出错
//  public synchronized  LazySingleton getInstance(){
//      if(instance==null){ //先判断是否这空
//          instance = new LazySingleton();  //懒汉式做法
//      }
//      return instance;
//  }

    //写法三 最安全的方法
    public  LazySingleton getInstance(){
        if(instance==null){ //先判断是否这空
            synchronized (LazySingleton.class){
                instance = new LazySingleton();  //懒汉式做法
            }
        }
        return instance;
    }
}

2、饿汉式

/**
 * 单例设计模式之饿汉式
 */
public class HungrySingleton {

    private HungrySingleton(){}

    private HungrySingleton instance = new HungrySingleton(); //建立对象

    public HungrySingleton getInstance(){
        return instance; //直接返回单例对象
    }

}

总结:
1、所谓“懒汉式”与“饿汉式”的区别,是在与建立单例对象的时间不同。
“懒汉式”是在你真正用到的时候才去建这个单例对象
2、在单线程中,两者效果是一样的
3、但是在多线程的环境下,饿汉式没有问题,懒汉式可能会产生初始化多个实例的情况。在多线程的环境下,出错的地方就在if判断这里,没有加线程同步,最高效的保证懒汉式在多线程的环境下,不创建多个对象的代码如下
4、饿汉急要,上来直接先喂饱。
懒汉不急,啥时候用啥时候喂。

猜你喜欢

转载自blog.csdn.net/wufeiqing/article/details/50887040
今日推荐