美文网首页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设计模式 - 单例模式

    JAVA设计模式 - 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • Java中单例模式你用的哪一种?

    一起讨论java中的单例模式。单例模式是java设计模式中算是最简单的设计模式了。 * java实现单例模式的写法...

  • 状态模式(State)-七十二变

    设计模式文章陆续更新 java单例模式java代理模式java工厂模式 状态模式(State)-老孙七十二变 俺老...

  • JAVA设计模式之单例模式

    JAVA设计模式之单例模式

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

  • 连工厂模式都不知道,别说你会设计模式

    设计模式文章陆续更新 java单例模式java代理模式java状态模式 在Java面向对象编程中,我们通常会new...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 设计模式——单例模式

    设计模式——单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型...

  • 设计模式

    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式...

网友评论

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

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