【编码魔法师系列_构建型2.1】单例模式「饿汉式」(Singleton Pattern)

news2024/11/25 14:31:15

在这里插入图片描述

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。

文章目录

  • 实例:
  • 目的:
  • 适用场景:
  • 优点:
  • 弊端:
  • 类图:
  • 框架用到的地方:
  • Coding:
  • 测试
  • 测试结果

实例:

我们将构造方法定义为 private,这就保证了其他类无法实例化此类,必须通过 getInstance 方法才能获取到唯一的 instance 实例。

目的:

变量在声明时便初始化,提供全局需要使用的,唯一的数据访问

适用场景:

1、要求生产唯一序列号
2、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等

优点:

1、按需加载,避免了内存浪费,减少了类初始化时间;线程安全
2、在类加载时就完成了初始化;所以类加载较慢,但获取对象的速度快

弊端:

即使这个单例不需要使用,它也会在类加载之后立即创建出来,占用一块内存,并增加类初始化时间。

类图:

在这里插入图片描述

框架用到的地方:

J2EE 标 准 中 的 ServletContext 、 ServletContextConfig 等 、 Spring 框 架 应 用 中 的 ApplicationContext、数据库的连接池BDPool等也都是单例形式。Runtime这个类

Coding:

HungrySingleton

public class HungrySingleton {
    private static HungrySingleton instance = new HungrySingleton();

    private HungrySingleton() {
    }

    public static HungrySingleton getInstance() {
        return instance;
    }

    public void showMsg(){
        System.out.println("This is HungrySingleton!");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        HungrySingleton instance = HungrySingleton.getInstance();
        System.out.println(instance);
        instance.showMsg();

        HungrySingleton instance2 = HungrySingleton.getInstance();
        System.out.println(instance2);
        instance2.showMsg();
    }
}

测试结果

HungrySingleton@5a07e868
This is HungrySingleton!
HungrySingleton@5a07e868
This is HungrySingleton!

我们可以看出输出的内容和内存地址是同一个,这表明对象只被实例化了一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java实现图片转文字!(OCR实现)

今天给大家分享一个Java实现OCR(图片转文字)的方法。 具体实现是把tess4j整合到一个SpringBoot项目中。 下面是详细步骤 什么是Tess4j 在实现OCR之前,先要分清楚Tesseract和Tess4j的区别。 Tesseract是一个开源的光学字符识别&#xff08…

Python数据分析实战-applymap、apply、map有什么区别?(附源码和实现效果)

实现功能 applymap:applymap 是 DataFrame 对象的方法,用于对 DataFrame 中的每个元素应用一个函数。它将函数应用于 DataFrame 的每个元素,并返回一个新的具有相同形状的 DataFrame。applymap 通常用于对 DataFrame 中的每个单元格进行元素…

线性系统的根轨迹分析

根轨迹法:通过求开环零点和开环极点,来画出闭环极点在S平面的位置。 也是用来判断系统稳定性的。 定义:根轨迹是指系统特征方程式的根(闭环极点)随系统参量变化 在S平面 上运动而形成的轨迹。 开环传递函数里边的一个参数&…

还不会在MT4用Renko,FPmarkets澳福手把手教你一分钟学会

很多投资者还不会在MT4上使用Renko,让FPmarkets澳福通过一个具体的例子来探讨,Renko图表指标在MT4平台上的应用,以AG Renko为例。 首先,投资者需要解压缩下载的档案,并将其移动到MT4的“指标”文件夹中。重启MetaTrade…

1-k8s1.24-底座搭建-基于containerd

文章目录 一、服务器准备二、安装Containerd三、安装k8s四、安装部署dashboard ps:第一遍搭建ks8的时候,由于k8s在1.24版本之后就放弃了对docker的支持,如果要继续使用docker需要自己加载插件。所以一开始就是直接使用 k8s1.24containerd进行…

COMPFEST 15 - Preliminary Online Mirror I. Imagination Castle(dp递推+sg函数思想)

题目 n*m(1<n,m<2e5)的棋盘&#xff0c;有k(k<min(n*m,2e5))个特殊位置&#xff0c; 初始时在(1,1)位置&#xff0c;Chaneka和Bhinneka两人玩游戏&#xff0c;Chaneka先手&#xff0c; 当你在(x,y)位置时&#xff0c;下一步可以走到同一行靠右的位置(xx,y>y)或同…

格式化前做好备份,内存卡数据安全无忧

内存卡格式化会怎么样&#xff1f;了解格式化原理的小伙伴都明白&#xff0c;格式化操作会清除内存卡上的所有数据&#xff0c;包括文档、照片、视频等文件。 因此&#xff0c;在格式化内存卡之前&#xff0c;我们需要将重要的数据进行备份以免丢失。那么&#xff0c;内存卡格式…

408-2015

一、单项选择题 1.已知程序如下。 int S(int n){return n<0?0:s(n-1)n; } void main(){cout<<S(1); }程序运行时使用栈来保存调用过程的信息&#xff0c;自栈底到栈顶保存的信息依次是_____。 A.main()->S(1)->S(0) B.S(0)->S(1)->main() …

uniapp安卓 华为商店 vivo商店 oppo 小米 上架问题 Android中怎么才能不提前申请权限

问题描述 提交 小米 oppo 市场审核失败&#xff0c;原因是提前向用户申请开启通讯录、定位、短信、录音、相机和日历等权限。 解决方案&#xff1a; 是否有使用 READ_PHONE_STATE 权限&#xff0c;如果有使用 oaid 代替&#xff1b;是否有使用第三方 SDK&#xff0c;如果有关…

RPA厂商有哪些?国内头部5家RPA厂商的分析对比

一、RPA是什么&#xff1f; 能模拟人工进行鼠标点击键盘输入、读取信息等操作&#xff0c;实现电脑和手机上各种软件的自动化。 快速搭建任何自动化流程&#xff0c;在工作中&#xff0c;一切重复有规则的事情都可以用RPA来实现自动化。 二、RPA能帮助政企解决什么问题&#…

【百家稷学】人才强企数字化赋能人工智能深度培训(中国联通集团实训)

继续咱们百家稷学专题&#xff0c;本次是有三AI在中国联通集团进行的系统性培训。百家稷学专题的目标&#xff0c;是走进100所高校和企业进行学习与分享。 分享主题 本次分享是在中国联通集团山西邮电学院进行&#xff0c;由51CTO负责组织&#xff0c;主题是《人才强企数字化赋…

外部统一设置了::-webkit-scrollbar { display: none; }如何单独给特定元素开启滚动条设置样式-web页面滚动条样式设置

如果你在外部统一设置了​​::-webkit-scrollbar { display: none; }​​​来隐藏滚动条&#xff0c;但是想要在​​.lever​​元素中单独开启滚动条的样式&#xff0c;你可以使用CSS的级联选择器来覆盖外部样式。 以下是一个示例&#xff0c;展示如何给​​.lever​​单独开启…

linux centos7提示 cannot found font installed on the system.calibri

主图 目录 1.问题描述2.问题解决2.1安装Microsoft Core Fonts2.2手动安装字体文件&#xff1a;2.3查看当前系统基本型细腻 总结参考 文章所属专区 超链接 1.问题描述 linux centos7提示 cannot found font installed on the system.calibri &#xff0c;linux系统找不到cali…

226、翻转二叉树

题目链接&#xff1a; \sf 题目链接&#xff1a; 题目链接&#xff1a; 图解&#xff1a; 方法一、 D F S \sf 方法一、DFS 方法一、DFS 递归&#xff1a; 让左子树是翻转后的右子树&#xff0c; 右子树是翻转后的左子树。 ∴从叶结点开始&#xff0c;自底向上逐步翻转。递归出…

2023年中国超硬材料制品分析及超硬刀具市场规模分析[图]

超硬材料是指硬度特别高的材料&#xff0c;可分为天然以及人造两种&#xff0c;前者主要包括天然的钻石&#xff08;金刚石&#xff09;、黑钻石&#xff0c;后者则包括人造金刚石、立方氮化硼。 超硬材料制品分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#x…

轨迹规划 | 图解动态窗口算法DWA(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 动态障碍建模2 DWA基本原理2.1 采样窗口2.2 评价函数 3 DWA算法流程4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(…

文案配音软件哪个好?(适合新手使用)

随着短视频的逐渐普及&#xff0c;视频博主越来越多&#xff0c;所以很多朋友也期待成为视频博主。但是&#xff0c;如果你想成为一个有名的视频博主&#xff0c;你需要在很多层面上比别人做得更好。其中之一就是视频文字的配音。相信大部分人都没有配音的技巧&#xff0c;所以…

mybatis plus MetaObjectHandler 不生效

首先要知道,spring boot 只会加载启动类同级和下级的bean 如果把bean放在启动类不同的上级目录,是加载不了bean的 如果把mybatisplus的配置文件放在与启动类不同包,就会扫描不到 例如放在这里,就扫描不到 放到这里,就可以扫描到

部署云端SIEM解决方案的5个优势

随着组织迅速转向云端以利用云计算的优势&#xff0c;包括SIEM&#xff08;安全信息与事件管理&#xff09;在内的服务也正在向云端迁移。事实上&#xff0c;SIEM即服务正在迅速崭露头角&#xff0c;成为传统的本地SIEM解决方案的替代品。在Gartner的《采用SaaS SIEM前需回答的…

数学知识总结

素数 质数/素数定义 在大于1的整数中&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数&#xff0c;或者叫素数 判断素数&#xff08;试除法&#xff09; 约数有一个重要的性质&#xff1a; 假设n代表数字&#xff0c;d代表n的一个约数 即d能整除n(d|n) 那么n…