设计模式Android开发Android开发经验谈

Android 设计模式之单例模式

2017-10-09  本文已影响318人  AntDream

在日常开发过程中时常需要用到设计模式,但是设计模式有23种,如何将这些设计模式了然于胸并且能在实际开发过程中应用得得心应手呢?和我一起跟着《Android源码设计模式解析与实战》一书边学边应用吧!

设计模式系列文章


今天我们要讲的是单例模式

定义

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

使用场景

使用例子


实现

实现的要点

常见的实现方式

饿汉单例模式

public class Singleton {
    private static final Singleton singleton = new Singleton();
    //构造函数私有化
    private Singleton() {
    }
    //公有的静态函数,对外暴露获取单例对象的接口
    public static Singleton getInstance() {
        return singleton;
    }
}

懒汉模式

public class Singleton {
    private static Singleton singleton;
    //构造函数私有化
    private Singleton() {
    }
    //公有的静态函数,对外暴露获取单例对象的接口
    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

以上的2种模式用的都不多,了解一下就好,下面介绍平时用得比较多的单例模式

Double Check Lock(DCL)模式(双重检查锁定模式)

public class Singleton {
    private static Singleton singleton = null;
    //构造函数私有化
    private Singleton() {
    }
    //公有的静态函数,对外暴露获取单例对象的接口
    public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

静态内部类单例模式

public class Singleton {
    private Singleton() {
    }
    
    public static Singleton getInstance() {
        return SingletonHolder.sInstance;
    }
    
    //静态内部类
    private static class SingletonHolder {
        private static final Singleton sInstance = new Singleton();
    }
}

静态内部类单例模式和DCL模式是推荐的单例实现模式

枚举单例

public enum Singleton {
    INSTANCE;
}

总结


最后加点福利

添加单例模式的模板

源码地址:https://github.com/snowdream1314/DesignPatternsExamples

上一篇 下一篇

猜你喜欢

热点阅读