读android 设计模式 第二章单例模式

单例模式  单例对象的类只有一个实例存在 避免产生多个对象消耗过多资源

  构造方法一般不对外开放 一般为private 

  通过静态方法或枚举返回单例类对象 

  确保单例类对象有且只有一个 尤其是多线程的情况下

  确保单例类对象在反序列化的时候不会重新构建对象

单例模式的构建

1 懒汉模式 

public class A{

private static A instance;

    private A() {}

   public static synchronized A getInstance(){

     if (instance==null){

     instance=new A();}

    return instance;}

}

通过 给getInstance 方法添加 synchronized 关键字实现线程同步 保证对象唯一 优点是第一次调用时才会被实例化 但问题在于即使 instance已经被实例化 再次调用getInstance也会再次进行同步 增加了开销 (可能是知道最多的单例模式)

2.Double Check Lock DCL

public class A {

private static A instance;

    private A() {

}

public static A getInstance() {

if (instance ==null) {

synchronized (A.class) {

if (instance ==null) {

instance =new A();

                }

}

}

return instance;

    }

}

3.静态内部类单例模式

class A {

private A() {

}

public static A getInstance() {

return AHolder.aInstance;

    }

private static class AHolder {

private static final AaInstance =new A();

    }

}

4.枚举单例

枚举本身就是单例

上述例子如果需要杜绝单例对象在反序列化时重新生成对象 需要重写 

private Object readResolve ()throws ObjectStreamException{

      return aInstance;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。