• static应用知识:单例设计模式


    1、什么是设计模式(Design pattern)

    开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。
    设计模式有20多种,对应20多种软件开发中会遇到的问题。
    学设计模式主要学2点:
    第一:这种模式用来解决什么问题;
    第二:遇到这种问题了,该模式是怎么写的,他是如何解决这个问题的。

    2、单例模式是什么?

    • 可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
    • 使用场景:例如电脑的任务管理器对象,我们只需要一个就可以解决问题了,这样可以节省内存空间。

    3、单例的实现方式

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

    (1) 饿汉单例设计模式
    在使用类获取对象的时候,对象已经提前为你创建好了。

    设计步骤:

    第一,定义一个单例类;
    第二,单例必须将构造器私有化,将构造器藏起来,防止对外产生对象;
    第三,定义一个静态变量存储一个对象即可:属于类,与类一起加载一次。
     

    1. //1.定义一个单例类
    2. public class SingleInstance {
    3. // 2.单例必须将构造器进行私有化,防止对外产生对象
    4. private SingleInstance() {
    5. }
    6. // 3.饿汉单例是在获取对象前,已经提前准备好一个对象;这个对象只能是一个,所有定义静态变量存储
    7. public static SingleInstance instance = new SingleInstance();
    8. }
    1. /**
    2. 单例测试类
    3. 目标:理解饿汉单例的设计步骤
    4. */
    5. public class SingleInstanceTest {
    6. public static void main(String[] args) {
    7. SingleInstance s1 = SingleInstance.instance; //获取对象
    8. SingleInstance s2 = SingleInstance.instance;
    9. System.out.println(s1 == s2);
    10. }
    11. }

    控制台输出结果:

     饿汉单例重点总结

    1、饿汉单例的实现步骤?

    • 定义一个类,把构造器私有化(防止对外产生对象)
    • 定义一个变量存储一个对象(调用类时,对象已经准备好了,与类一起加载一次)

    (2) 懒汉单例设计模式

    • 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。

    • 设计步骤:

      • 第一,定义一个类,把构造器私有化:防止对外产生对象;
      • 第二,定义一个静态变量存储一个对象即可:属于类,与类一起加载一次;
      • 第三,必须提供一个方法返回一个单例对象-
    1. //1.定义一个懒汉单例类
    2. public class SingleInstance02 {
    3. // 2.必须将构造器私有化:防止对外产生对象
    4. private SingleInstance02(){
    5. }
    6. // 3.定义静态变量存储一个对象;与类一起加载,只加载一次。最好做到私有化,这样可以避免给别人挖坑,公开化别人只会拿到一个null
    7. private static SingleInstance02 instance02;
    8. // 4.提供一个方法,获取一个单例对象 再return返回单例对象
    9. public static SingleInstance02 getInstance02(){
    10. if (instance02 == null){
    11. instance02 = new SingleInstance02();
    12. }
    13. return instance02;
    14. }
    15. }
    1. public class SingleInstanceTest02 {
    2. public static void main(String[] args) {
    3. // 获取对象
    4. SingleInstance02 s1 = SingleInstance02.getInstance02();
    5. SingleInstance02 s2 = SingleInstance02.getInstance02();
    6. System.out.println(s1 == s2);
    7. }
    8. }

    控制台输出结果:

     

    懒汉单例重点总结

    1、懒汉单例的实现步骤?

    • 定义一个单例类,把构造器私有化(防止对外产生对象)
    • 定义一个私有化的静态变量,用于存储一个对象,不设初始值
    • 提供一个返回单例对象的方法
  • 相关阅读:
    深度学习基于python+TensorFlow+Django的花朵识别系统
    外贸独立站为什么需要做邮件营销
    GBase 8s ALTER FRAGMENT 语句 MODIFY子句(三)
    【数电】IEEE754浮点数
    Go语言 文件操作
    Rasa Labs:构建对话式人工智能的未来
    2.3 LINQ
    [免费专栏] ATTACK安全之Android ICMP隧道攻击原理与入侵检测实践
    台达 PLC ISPSoft 3.16--项目文件解密
    openlayers图层数据覆盖
  • 原文地址:https://blog.csdn.net/weixin_58618735/article/details/128105528