美文网首页
单例模式

单例模式

作者: 黄同学2019 | 来源:发表于2019-01-15 16:09 被阅读3次

单例模式又叫做 Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。主要有两种单例模式,分别为 饿汉式单例模式 和 懒汉式单例模式。

饿汉式单例模式

原理:

package package3;
//饿汉式单例模式,实现思路:
//1. 构造方法私有化
//2. 静态类实例化对象
//3. 调用静态方法获取唯一实例


public class GiantDragon {
    
    private GiantDragon(){}  // 使用私有化静态构造方法,保证只有自己可以访问,只有自己可以 new 对象

    private static GiantDragon instance = new GiantDragon(); //这里实例化对象给私有化静态引用

    public static GiantDragon getInstance(){
        return  instance;
    }
}

测试

package package3;

public class TestGiantDragon {

    public static void main(String [] args){

        GiantDragon t1 = GiantDragon.getInstance(); // 获得该实例

        GiantDragon t2 = GiantDragon.getInstance(); // 获得该实例

        System.out.println(t1 == t2);  // 结果为 true,表示使用的是同一个实例

    }
}

懒汉式单例模式

原理:

package package4;

// 懒汉式单例模式
public class GiantDragon {

    private GiantDragon(){} //私有化构造方法,保证只有自己能够访问和创建对象

    private static GiantDragon instance; // 重要区别:私有化类引用,但是没有实例化

    public static GiantDragon getInstance(){

        if(null == instance){

            instance = new GiantDragon();  // 此处实例化

            System.out.println("懒汉式单例模式——大龙被实例化");

        }
        return instance;
    }
}

测试:

package package4;

public class TestDragon {

    public static void main(String[] args) {

        GiantDragon dragon = GiantDragon.getInstance(); // 获得该实例

        GiantDragon dragon2 = GiantDragon.getInstance(); // 获得该实例

        System.out.println(dragon == dragon2); // 结果为 true ,表示为同一个实例
    }
}

使用场景

什么时候使用饿汉式,什么时候使用懒汉式?

饿汉式立即加载的方式,无论是否会用到这个对象,都会加载。
如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

懒汉式,是延迟加载的方式,只有使用的时候才会加载。 并且有线程安全的考量(鉴于同学们学习的进度,暂时不对线程的章节做展开)。
使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

看业务需求,如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式

单例模式三要素

面试官: 什么是单例模式?

回答的时候,要答到三元素

  1. 构造方法私有化
  2. 静态属性指向实例
  3. public static的 getInstance方法,返回第二步的静态属性

参考资料(推荐阅读):

相关文章

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式

    单例模式1 单例模式2

  • java的单例模式

    饿汉单例模式 懒汉单例模式

网友评论

      本文标题:单例模式

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