美文网首页Android知识Java学习笔记Android技术知识
Java 设计模式 (不定期更新)----单例模式

Java 设计模式 (不定期更新)----单例模式

作者: 夏沐尧 | 来源:发表于2017-08-24 15:54 被阅读35次

    网上关于单例模式的讲解铺天盖地,而这个设计模式在开发中用的频率也比较频繁,所以说说这个。
    单例模式,顾名思义,通过这个模式构建出的对象在整个项目的运行中有并且只有只一个,且对象不变。具体怎么做呢

    public class Appcontext {
    
        //在创建最初就new一次,仅仅一次
        private static final Appcontext appcontext = new Appcontext();
    
        //私有方法,不让外部去访问
        private Appcontext() {
        }
    
        //通过这个方法去返回给调用者唯一对象
        public static Appcontext getAppcontext() {
            return appcontext;
        }
    
    }
    

    这种写法被称之为饿汉模式,既然有饿汉模式就有懒汉模式

    public class Appcontext {
    
        //在创建最初就new一次,仅仅一次
        private static Appcontext appcontext = new Appcontext();
    
        //私有方法,不让外部去访问
        private Appcontext() {
        }
    
        //通过这个方法去返回给调用者唯一对象
        public static Appcontext getAppcontext() {
            if (appcontext == null) {
                appcontext = new Appcontext();
            }
            return appcontext;
        }
    }
    

    这就是饿汉模式,但是缺有线程不安全的情况发生,比如线程A运行到了

    appcontext = new Appcontext();
    刚刚进入,但是还没有new
    

    线程B执行到了

    if (appcontext == null) {
    

    此时appcontext确实是==null的,然后2秒(随便说的2秒)过后,你的项目就存在了2个对象。刺激吧=w=
    所以我这里还是推荐第一种写法。
    单例模式是用的最广泛而且最简单的一种单例模式了,使用的时候注意一下,如果你用单例模式构建一个对象去存储一个东西,那么这个对象是不会销毁的,除非你手动释放资源。不然可能会发生内存泄露的事情。!!!!要注意!!!

    相关文章

      网友评论

        本文标题:Java 设计模式 (不定期更新)----单例模式

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