【JAVA学习笔记】38 - 单例设计模式-静态方法和属性的经典使用
项目代码
https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_
一、什么是设计模式
1.静态方法和属性的经典使用
2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索
二、什么是单例模式
单例(单个的实例)
1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某
个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2.单例模式有两种方式: 1) 饿汉式2)懒汉式

三、单例模式应用实例
演示 饿汉式和懒汉式单例模式的实现
步骤如下:
1.饿汉式 在类加载的时候就就创建对象了 所以可以造成创建了对象但是没有使用 资源的浪费
1)构造器私有化(防止直接new)
2)类的内部创建静态对象
3)向外暴露一个静态的公共方法。getInstance
4)代码实现
public class SingleTon01 {public static void main(String[] args) {// GirlFriend xiaohuang = new GirlFriend("xiaohuang");// GirlFriend xiangwang = new GirlFriend("xiangwang");//通过方法就可以获取对象GirlFriend instance = GirlFriend.getInstance();System.out.println(instance);GirlFriend instance1 = GirlFriend.getInstance();System.out.println(instance1);System.out.println(instance == instance1);}
}
class GirlFriend{private String name;//为了能够在静态方法中使用,需要static修饰private static GirlFriend gf = new GirlFriend("hong");//2//如何保障只能创建一个GirlFriend对象?//1.私有化构造器//2.在类的内部创建静态对象//3.提供一个公共的静态static方法 返回gf对象private GirlFriend(String name) {//1this.name = name;}public static GirlFriend getInstance(){//3return gf;}
}
2.懒汉式 在类被使用的时候才创建对象
1)仍然构造器私有化
2)定义一个static静态属性对象
3)提供一个public的static方法,可以返回一个Cat对象
public class SingleTon02 {public static void main(String[] args) {System.out.println(Cat.n1);//此时使用n1并没有创建cat对象Cat instance = Cat.getInstance();//创建对象Cat instance1 = Cat.getInstance();//因为对象不为空,所以只会创建一次System.out.println(instance == instance1);}
}
class Cat{private String name;public static int n1 = 100;private static Cat cat;//1)仍然构造器私有化// 2)定义一个static静态属性对象// 3)提供一个public的static方法,可以返回一个Cat对象private Cat(String name){System.out.println("构造器被调用");this.name = name;}public static Cat getInstance(){if(cat == null){//如果还没有创建cat对象cat = new Cat("xiaohua");}return cat;}
}

四、饿汉式和懒汉式的区别
1.二者的主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时创建
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题(后面学习线程后,会完善一把)

3.饿汉式存在浪费资源的可能,因为如果一个实例对象都没使用,那么饿汉式创建的对象就浪费了;但懒汉式是使用时才创建就不存在这个问题
4.在我们javaSE标准类中,java.lang.runtime就是经典的单例模式
public class Runtime {private static Runtime currentRuntime = new Runtime();/*** Returns the runtime object associated with the current Java application.* Most of the methods of class <code>Runtime</code> are instance* methods and must be invoked with respect to the current runtime object.** @return the <code>Runtime</code> object associated with the current* Java application.*/public static Runtime getRuntime() {return currentRuntime;}
相关文章:
【JAVA学习笔记】38 - 单例设计模式-静态方法和属性的经典使用
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_ 一、什么是设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。设计模式就像是…...
m1 安装 cocoapods
其实最终解决问题很简单,麻烦的是如果找到解决问题的答案。 前提条件: 命令行工具,不能以rosetta方法打开。 首先安装homebrew 这里不多说了,自行解决。 使用brew安装cocoapods brew install cocoapods, pod --ver…...
【大数据】Kafka 实战教程(一)
Kafka 实战教程(一) 1.Kafka 介绍1.1. 主要功能1.2. 使用场景1.3 详细介绍1.3.1 消息传输流程1.3.2 Kafka 服务器消息存储策略1.3.3 与生产者的交互1.3.4 与消费者的交互 2.Kafka 生产者3.Kafka 消费者3.1 Kafka 消费模式3.1.1 At-most-once(…...
求臻医学:肺癌患者就诊指南及基因检测意义
2023年国家癌症中心公布的最新的数据显示,中国癌症新发病例数前十的癌症分别是:肺癌82万,结直肠癌56万,胃癌48万,乳腺癌42万,肝癌41万,食管癌32万,甲状腺癌22万,胰腺癌12…...
【项目管理】项目中如何进行风险管理
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
【算法题】得到K个半回文串的最小修改次数
题目: 给你一个字符串 s 和一个整数 k ,请你将 s 分成 k 个 子字符串 ,使得每个 子字符串 变成 半回文串 需要修改的字符数目最少。 请你返回一个整数,表示需要修改的 最少 字符数目。 注意: 如果一个字符串从左往…...
C# 通过IP获取Mac地址(ARP)
C# 通过IP获取Mac地址 [DllImport("Iphlpapi.dll")] private static unsafe extern int SendARP(Int32 dest, Int32 host, ref Int32 mac, ref Int32 length);[DllImport("Ws2_32.dll")] private static extern Int32 inet_addr(string ip);public static…...
【QT】信号和槽
一、前置示例代码 main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv); // 应用程序对象a,在Qt中,应用程序对象,有且仅有一个。Widget w; // 窗口对…...
有话则长,无话则短
有话则长,无话则短...
云台/稳定器/无人机姿态控制之欧拉角与四元数控制优缺点分析
基于欧拉角的姿态控制简述: 通过陀螺仪数据解算出姿态:pitch,roll,yaw(相对航向),根据目标 姿态:dst_pitch,dst_roll,dst_yaw计算出误差姿态pitch_err,roll_err,yaw_err。将误差姿态转换为目标速度e_pitch_rate,e_roll_rate,e_yaw_rate。然后…...
Go 工具链详解(六):依赖管理神器
go mod 是 Golang 的官方依赖管理工具,从 Go 1.11 版本开始引入。go mod 使用一种被称为模块(modules)的方式来管理依赖,每个模块都包含了一组 Golang 包。一个 Go 程序可以由多个模块组成,每个模块都可以有自己的 go.…...
C语言解决约瑟夫环问题
约瑟夫环问题是一个经典的数学问题,它的描述如下:有n个人围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始重新报数,数到第m个人出列,如此循环,直到最后一个人…...
6.6 Elasticsearch(六)京淘项目改造
文章目录 1.项目准备2.基础配置2.1 添加pom.xml依赖2.2 yml配置es服务器地址列表 3.具体实现3.1 item实体类封装3.2 添加接口3.3 SearchController 4.search.jsp界面4.1 搜索内容展示4.2 高亮内容样式设置4.3 搜索框内容回填4.4 添加上下页按钮 1.项目准备 我们切换回到此前的…...
Socks5代理:数字化时代的技术支柱
随着数字化时代的到来,技术不仅改变了我们的日常生活,还重新定义了商业、通信、娱乐和全球互联。在这一浪潮中,Socks5代理技术崭露头角,成为跨界电商、爬虫数据分析、企业出海和游戏体验的关键推动力。这项技术不仅在实现数字化愿…...
基本微信小程序的汽车租赁公司小程序
项目介绍 任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Java语言、微信小程序技术设计并实现了汽…...
Leetcode刷题详解——搜索插入位置
1. 题目链接:35. 搜索插入位置 2. 题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。…...
centos升级openssh
注意: openssh升级异常会造成服务失联,如果在允许的情况下可以安装talent服务,使用talent升级; 如果不能安装talent服务,可以打开多个终端,启动ping命令,防止升级终端失败后,作为备用…...
架构、框架、模式,极简文字介绍
1、架构、框架、模式是一种从大到小的关系,也是一种组合关系 2、架构一般针对一个行业或一类应用,是技术和应用的完美组合 3、框架比较小,很多表现为中间件,框架一般是从技术角度解决同类问题,从技术的横切面来解决实…...
Java实现Fisher‘s Exact Test 的置信区间的计算
实现代码 package com.bgi.aigi.common.utils;public class FisherExactUtils {public static double[] getConfidenceInterval(double[][] data) {if (datanull||data.length!2||data[0].length!2||data[1].length!2) {return null;}double[] intervalnew double[2];double …...
YOLOv8改进:全网原创首发 | 新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022
💡💡💡本文全网首发独家改进:多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 1)作为注意力MSCA使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,多尺度特性在小目标检测表现也十分出色。 💡💡💡Yolov8魔术师,独家首发…...
告别showSoftInput失效:一文读懂Android 11+的WindowInsetsController输入法控制
Android输入法控制演进:从InputMethodManager到WindowInsetsController的深度解析 在移动应用开发中,输入法交互是最基础却又最容易被忽视的细节之一。许多开发者都曾遇到过这样的场景:精心设计的登录界面,光标在输入框闪烁&#…...
终极免费城通网盘直连解析工具:告别下载限速的完整指南
终极免费城通网盘直连解析工具:告别下载限速的完整指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载速度慢、等待时间长而烦恼吗?ctfileGet是一款专为城通…...
前端工程化实战:基于 Kelivo 模板的配置即代码与自动化工作流
1. 项目概述与核心价值最近在整理个人开发环境时,发现一个挺有意思的项目,叫Chevey339/kelivo。乍一看这个仓库名,可能有点摸不着头脑,但点进去之后,你会发现它是一个围绕特定开发工具或框架进行深度定制、优化和功能增…...
Scarab空洞骑士模组管理器:2024年最完整的安装与使用指南
Scarab空洞骑士模组管理器:2024年最完整的安装与使用指南 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为空洞骑士模组安装的复杂流程而烦恼吗?…...
AI驱动代码审查:Cursor与Git工作流融合实践
1. 项目概述:当AI代码助手遇上代码审查最近在GitHub上看到一个挺有意思的项目,叫guinacio/cursor-review。光看名字,你可能会觉得这又是一个普通的代码审查工具,但点进去仔细研究,你会发现它的核心思路非常巧妙&#x…...
BiscuitLang:专为Web业务逻辑设计的轻量级脚本语言
1. 项目概述:一个为现代Web开发而生的轻量级语言如果你和我一样,长期在Web前端和全栈开发的泥潭里摸爬滚打,那你一定对JavaScript生态的“臃肿”与“复杂”深有体会。一个简单的项目动辄node_modules文件夹体积惊人,工具链配置繁琐…...
树莓派+Kali Linux+PiTFT打造便携式安全测试平台全攻略
1. 项目概述如果你和我一样,对网络安全和嵌入式硬件都抱有浓厚的兴趣,那么将Kali Linux与树莓派结合,再配上一块小巧的触摸屏,绝对是一个能让你兴奋起来的项目。这不仅仅是把两个热门技术拼在一起,更是打造一个真正便携…...
TransPrompt:结构化提示词工程,提升LLM应用开发效率
1. 项目概述:当提示词工程遇上结构化工具最近在折腾大语言模型应用开发的朋友,估计都绕不开一个核心痛点:如何高效、稳定地管理那些越来越复杂、越来越长的提示词(Prompt)。直接写在代码里?改起来麻烦&…...
安卓客户端架构解析:从MVVM到网络通信的完整实践
1. 项目概述:一个面向安卓设备的智能客户端最近在整理手头的开源项目时,发现了一个挺有意思的仓库,名字叫TOM88812/xiaozhi-android-client。光看这个标题,你可能会有点摸不着头脑,这“小智”到底是个啥?是…...
HTTP客户端设计哲学:从axios到hoomanity的易用性演进
1. 项目概述:一个为人类设计的HTTP客户端在构建现代应用程序时,与外部API或服务进行HTTP通信几乎是每个开发者都会遇到的日常任务。无论是调用一个天气接口、上传文件到云存储,还是与自家的微服务进行数据交换,我们都需要一个可靠…...
