静态方法和属性的经典使用-单例设计模式
单例设计模式
- 一、设计模式
- 二、单例模式
- 1、饿汉式
- 2、懒汉式
- 3、区别
单例设计模式是静态方法和属性的经典使用。
一、设计模式
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。
二、单例模式
单例:单个的实例
- 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
- 单例模式有两种方式 :① 饿汉式 ② 懒汉式
1、饿汉式
步骤
(1) 构造器私有化 =>防止直接new对象
(2) 类的内部创建静态对象(new)
(3) 向外暴露一个静态的公共方法getlnstance。
(4) 代码实现
public class SingleTon01 {public static void main(String[] args) {Wife instance = Wife.getInstance();System.out.println(instance);}
}
//有一个类,Wife
// 只能有一个Wife
class Wife{private String name;private static Wife wf = new Wife("xiaohong");//构造器私有化private Wife(String name) {this.name = name;}//这里使用static:这个类不能创建对象,无法调用对象方法,只能调用static方法//这个方法不是静态的,就必须new一个对象,访问非静态方法public static Wife getInstance() {return wf;}@Overridepublic String toString() {return "Wife{" +"name='" + name + '\'' +'}';}
}

饿汉式,有可能没使用这个实例,就创建好了。private static Wife wf = new Wife(“xiaohong”); 是静态变量,在类加载的时候就已经创建好了。这种对象通常是重量级的对象。可能造成创建了对象但是没有使用,所以会使资源浪费。
懒汉式,使用这个实例的时候再创建。
2、懒汉式
步骤
(1)构造器私有化
(2)定义一个static静态属性对象 (这里只是定义,没有使用new)
(3)提供一个public 的 static 方法 getInstance ,可以返回一个 Cat 对象。在此方法中才 new
(4)懒汉式:只有当用户使用 getInstance 时,才返回 cat 对象。后面再次调用时,会返回上次创建的对象。
//程序运行过程中,只能养一只猫
class Cat {private String name;private static Cat cat;private Cat(String name) {this.name = name;}public static Cat getInstance() {if(cat == null) {cat = new Cat("kitty");}return cat;}}
3、区别
- 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善)
- 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
- 在我们 javaSE标准类中,java.lang.Runtime 就是经典的单例模式。
(Runtime 源码,饿汉式)

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03
相关文章:
静态方法和属性的经典使用-单例设计模式
单例设计模式 一、设计模式二、单例模式1、饿汉式2、懒汉式3、区别 单例设计模式是静态方法和属性的经典使用。 一、设计模式 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局&…...
TCP七层协议
物理层 中间的物理链接可以是光缆、电缆、双绞线、无线电波。中间传的是电信号,即010101...这些二进制位。 比特(bit)是二进制(Binary Digit)的简称,电脑所有的信息都是二进制的,就是0和1组成的。 数据链路层 早期…...
规则引擎Drools使用,0基础入门规则引擎Drools(五)实战+决策表
文章目录 系列文章索引十、个人所得税计算器实战1、名词解释2、计算规则3、实现步骤 十一、信用卡申请实战1、计算规则2、实现 十二、保险产品准入规则实战1、决策表2、基于决策表的入门案例3、保险产品规则介绍4、实现步骤5、资料 系列文章索引 规则引擎Drools使用࿰…...
Java后端开发——MVC商品管理程序
Java后端开发——MVC商品管理程序 本篇文章内容主要有下面几个部分: MVC架构介绍项目环境搭建商品管理模块Servlet代码重构BaseServlet文件上传 MVC 是模型-视图-控制器(Model-View-Controller),它是一种设计模式,也…...
【隐私计算】VOLE (Vector Oblivious Linear Evaluation)学习笔记
近年来,VOLE(向量不经意线性评估)被用于构造各种高效安全多方计算协议,具有较低的通信复杂度。最近的CipherGPT则是基于VOLE对线性层进行计算。 1 VOLE总体设计 VOLE的功能如下,VOLE发送 Δ \Delta Δ和 b b b给send…...
国产linux单用户模式破解无密码登陆 (麒麟系统用户登录密码遗忘解决办法)
笔者手里有一批国产linu系统,目前开始用在日常的工作生产环境中,我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux,统信UOS等,基本都是基于debian再开发的linux。 问题描述: 因为…...
GPT市场将取代插件商店 openAI已经关闭plugins申请,全部集成到GPTs(Actions)来连接现实世界,可以与物理世界互动了。
Actions使用了plugins的许多核心思想,也增加了新的特性。 ChatGPT的"Actions"与"Plugins"是OpenAI在GPT模型中引入的两种不同的功能扩展机制。这两种机制的目的是增强模型的功能,使其能够处理更多样化的任务和请求。下面是对两者的比…...
PHP定义的变量 常量 静态变量等储存在内存什么位置?
在 PHP 中,变量、常量和静态变量都存储在内存中。它们的存储位置和生命周期有所不同。 变量:PHP 中的变量是动态类型的,它们的值和类型可以随时改变。当 PHP 脚本执行时,会在内存中分配一块空间来存储变量的值,这个空…...
C#中GDI+绘图应用(柱形图、折线图和饼形图)
目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形,其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图,是程序开发中比较常用的一种图表技术…...
连锁零售企业如何提高异地组网的稳定性?
随着数字化时代的到来,连锁零售企业面临着日益复杂和多样化的网络挑战。连锁零售企业是在不同地理位置拥有分支机构和零售店,可能同城或异地,需要确保各个地点之间的网络连接稳定和可靠。但由于不同地区的网络基础设施差异、网络延迟和带宽限…...
如何靠掌握自己的大数据打破信息流的壁垒?
在当今数字化时代,打造自己的私域流量已经成为商家乃至获取竞争优势的关键手段之一。通过掌握自己的大数据,可以更好地了解用户需求和市场趋势,优化产品和服务,从而打破信息流的壁垒。本文将就如何通过打造自己的私域流量并掌握大…...
LabVIEW绘制带有多个不同标尺的波形图
LabVIEW绘制带有多个不同标尺的波形图 通过在同一波形图上使用多个轴,可以使用不同的标尺绘制数据。请按照以下步骤操作。 将波形图或图表控件放在前面板上。 1. 右键点击您要创建多个标尺的轴,然后选择复制标尺。例如,如果要为一个…...
Oracle行转列,列转行使用实例
-----1.行转换为列 select a.fworkcenter as 车间,F1||-数量 as 类型, fspec as 规格 ,ftype as 前缀 , to_char(fdate,YYYY-MM-dd) as 日期, (case when a.fcode in (900,901) then to_char(fcount,fm90.990) else cast(fcount as varchar(20)) end) 值 , …...
056-第三代软件开发-软件打包
第三代软件开发-软件打包 文章目录 第三代软件开发-软件打包项目介绍软件打包1 下载 linuxdepoyqt 工具2 安装 linuxdepoyqt3 qmake配置4 打包程序 总结 关键字: Qt、 Qml、 linuxdeployqt、 Ubuntu、 AppImage 项目介绍 欢迎来到我们的 QML & C 项目&…...
C++相关闲碎记录(2)
1、误用shared_ptr int* p new int; shared_ptr<int> sp1(p); shared_ptr<int> sp2(p); //error // 通过原始指针两次创建shared_ptr是错误的shared_ptr<int> sp1(new int); shared_ptr<int> sp2(sp1); //ok 如果对C相关闲碎记录(1)中记录的shar…...
如何快速搭建一个大模型?简单的UI实现
🔥博客主页:真的睡不醒 🚀系列专栏:深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 💘每日语录:相信自己,一路风景一路歌,人生之美,正在于…...
国家开放大学 平时作业 测试题 训练
试卷代号:1340 古代小说戏曲专题 参考试题(开卷) 一、选择(每题1分,共10分) 1.下列作品中属于唐传奇的是( )。 A.《公孙九娘》 B.《观音作别》 C《碾玉观音》 …...
后端防止重复提交相同数据处理方式(Redis)
使用AOP注解处理接口幂等性,默认禁止同一用户在上次提交未果后10秒内又重复提交 在原先的sameUrlData的注解上进行了copy新建优化,使用redis去setnx的参数视项目使用点而调整,不一定是每个项目都适合这种取参形式。 源码如下: package com…...
最小栈[中等]
优质博文:IT-BLOG-CN 一、题目 设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。 实现MinStack类: MinStack()初始化堆栈对象。 void push(int val)将元素val推入堆栈。 void pop()删除堆栈顶部的元素。 in…...
Oracle(2-9) Oracle Recovery Manager Overview and Configuration
文章目录 一、基础知识1、User Backup VS RMAN2、Restoring &Recovering DB 还原&恢复数据库3、Recovery Manager Features 管理恢复功能4、RMAN Components RMAN组件5、Repository1: Control File 存储库1:控制文件6、Channel Allocation 通道道分配7、Media Manageme…...
OpenProject:构建高效团队协作的终极开源项目管理平台
OpenProject:构建高效团队协作的终极开源项目管理平台 【免费下载链接】openproject OpenProject is the leading open source project management software. 项目地址: https://gitcode.com/GitHub_Trending/op/openproject OpenProject 是一款领先的开源项…...
Deep-Live-Cam性能优化指南:从环境配置到实时换脸全流程解决方案
Deep-Live-Cam性能优化指南:从环境配置到实时换脸全流程解决方案 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam Deep-Live-…...
告别低效:用快马ai一键生成can总线数据分析与统计脚本
在汽车电子和嵌入式系统开发中,CAN总线数据的分析是个高频需求。无论是调试车载网络问题,还是优化通信性能,都离不开对海量CAN帧数据的处理。但手动写解析脚本不仅耗时,还容易遗漏关键细节。最近我发现用InsCode(快马)平台的AI辅助…...
Go开发工具终极对决:GoLand与VSCode深度评测与实战指南
1. Go开发工具的选择困境 刚接触Go语言那会儿,我像大多数新手一样纠结:到底该用哪个开发工具?市面上主流的GoLand和VSCode各有拥趸,论坛里的讨论经常演变成"编辑器党"和"IDE党"的论战。经过三年多的实战&…...
计算机图形学面试突击:Cohen-Sutherland编码裁剪的10种边界情况详解
计算机图形学面试突击:Cohen-Sutherland编码裁剪的10种边界情况详解 在计算机图形学的面试中,直线段裁剪算法是高频考点之一。Cohen-Sutherland算法作为经典解决方案,其核心在于通过编码和位运算快速判断线段与裁剪窗口的关系。本文将深入剖析…...
Linux文件搜索工具FSearch:从卡顿到闪电的搜索体验革新
Linux文件搜索工具FSearch:从卡顿到闪电的搜索体验革新 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 在Linux系统中,文件搜索往往是一场与时…...
开源 ESP32 网络收音机:OLED 界面与编码器交互全解析
1. ESP32网络收音机项目概述 第一次接触ESP32网络收音机项目时,我被这个小小的开发板展现出的强大功能震撼到了。想象一下,一个火柴盒大小的设备,不仅能连接WiFi播放全球各地的网络电台,还能通过OLED屏幕和编码器实现媲美商业产品…...
立创庐山派K230 RT-Smart GPIO驱动开发实战:从零构建LED控制应用
1. 庐山派K230开发板与RT-Smart系统初探 庐山派K230开发板是当前嵌入式开发领域的热门硬件平台,搭载了双核处理器架构,能够同时运行Linux和RT-Smart实时操作系统。RT-Smart作为一款轻量级实时操作系统,特别适合需要精确时序控制的嵌入式应用场…...
别再自己写驱动了!用STM32CubeMX HAL库5分钟搞定TM1637数码管显示
5分钟用STM32CubeMX HAL库驱动TM1637数码管:告别底层代码的终极方案 每次面对数码管驱动时,那些繁琐的GPIO初始化、时序控制和寄存器配置是否让你头疼不已?传统开发方式需要手动编写大量底层代码,不仅耗时耗力,还容易因…...
手把手教你用llama.cpp的RPC功能,把旧笔记本变成大模型推理服务器(附性能对比)
用llama.cpp的RPC功能将旧笔记本改造成大模型推理服务器的完整指南 1. 为什么需要分布式推理环境? 当我在2023年第一次尝试在个人笔记本上运行7B参数的大语言模型时,即使经过量化处理,生成每个token仍需要近10秒——这种体验简直令人崩溃。但…...
