美文网首页
Android中常用的设计模式----单例

Android中常用的设计模式----单例

作者: 咕哒咕 | 来源:发表于2021-02-27 19:12 被阅读0次

    单例模式可能是平常开发中使用最多的模式了。

    那么单例模式是怎么样的:单例模式的类必须保证只有一个实例存在。多用于整个程序只需要有一个实例,通常很消耗资源的类,比如网络请求,IO操作,访问数据库等。由于类比较耗资源,所以没必要让它构造多个实例。
    单例的定义
    确保某一个类只有一个实例,并且自行实例化,向整个系统提供这个唯一实例。


    单例的几种实现方式

    饿汉式:

     public class Singleton {
        private static final Singleton instance = new Singleton();
    
        private  Singleton() {}
    
        public static Singleton getInstance(){
            return  instance;
        }
    }
    

    优点:
    ①线程安全
    ②类加载时已经创建好了一个静态对象,调用时反应快。
    缺点:
    ①资源效率不高,可能没有使用getInstance,但是其他途径加载了
    该类,这个实例依然会初始化。

    懒汉式:

    public class Singleton{
        private static Singleton instance;
        
        private Singleton(){}
        
        public static **synchronized** Singleton getInstance(){//注意同步
            if(instance == null){
                instance = new Singleton();
            }
            return instance;
        }
    }
    

    优点:
    资源利用率高,延迟初始化,可使用类其他静态方法。
    缺点:
    第一次加载慢,多线程情况下不必要的同步开销增大。

    双重校验锁:

    public class Singleton{
        private volatile static Singleton instance;//注意volatile 关键字
        
        private Singleton(){}
        
        public static synchronized Singleton getInstance(){
            if(instance == null){
                synchronized(Singleton.class){
                    if(instance == null){
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    
    }
    

    添加了volatile关键字,保证了执行顺序。保证了高并发下会出现的问题。

    静态内部类:

    public class Singleton{
        private Singleton(){}
        
        public static Singleton getInstance(){
            return SingletonHolder.instance;
        }
        
        private static class SingletonHolder{
            private static final Singleton instance = new Singleton();
        }
    }
    

    \color{#FF0000}{推荐使用双重校验锁或者使用静态内部类方式,在非高并发情况下,去掉双重校验锁的volatile也可以}

    相关文章

      网友评论

          本文标题:Android中常用的设计模式----单例

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