Android设计模式 - 单例模式

作者: Android架构 | 来源:发表于2019-02-20 21:29 被阅读3次

    简介

    单例模式应该是我们接触到的最简单的设计模式,结构简洁,代码短小,实现起来非常容易。它确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

    单例模式包含如下角色:

    • Singleton:单例
      在单例类的内部实现只生成一个实例,同时它提供一个静态的工厂方法,让客户可以使用它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有。
    类图

    单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

    单例模式的实现方式有饿汉式、懒汉式、静态内部类等,要根据实际情况选择合适的方式。

    我主要使用下面三种实现方式,双重校验锁和静态内部类保证了线程安全和懒加载;饿汉式做到了线程安全,在类加载时就进行实例化。

    1. 双重校验锁:
    public class Singleton {  
        private volatile static Singleton singleton;  
    
        private Singleton (){
    
        }  
    
        public static Singleton getSingleton() {  
            if (singleton == null) {  
                synchronized (Singleton.class) {  
                    if (singleton == null) {  
                        singleton = new Singleton();  
                    }  
                }  
            }  
            return singleton;  
        }  
    }  
    
    
    1. 静态内部类:
    public class Singleton {  
        private static class SingletonHolder {  
            private static final Singleton INSTANCE = new Singleton();  
        }  
    
        private Singleton (){
    
        }  
    
        public static final Singleton getInstance() {  
            return SingletonHolder.INSTANCE;  
        }  
    }   
    
    
    1. 饿汉式:
    public class Singleton {  
        private static Singleton instance = new Singleton();  
    
        private Singleton (){
    
        }  
    
        public static Singleton getInstance() {  
            return instance;  
        }  
    }  
    
    

    单例模式的优点:提供了对唯一实例的受控访问并可以节约系统资源。
    缺点:由于缺少抽象层而难以扩展,而且单例类职责过重。
    使用场景:系统只需要一个实例对象;客户调用类的单个实例只允许使用一个公共访问点。
    【附录】

    资料图

    需要资料的朋友可以加入Android架构交流QQ群聊:513088520

    点击链接加入群聊【Android移动架构总群】:加入群聊

    获取免费学习视频,学习大纲另外还有像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等Android高阶开发资料免费分享。

    相关文章

      网友评论

        本文标题:Android设计模式 - 单例模式

        本文链接:https://www.haomeiwen.com/subject/vbpkyqtx.html