Java复习-25-单例设计模式
单例设计模式
目的(使用场景)
在实际开发下,会存在一种情况:某一种类在程序的整个生命周期中,只需要实例化一次就足够了。例如,系统数据类,由于操作系统只有一个,因此在程序初始化时该类只需要实例化一次,之后的系统数据更改都是在这一个实例化对象中进行就可以。
功能
主要是一种控制实例化对象产生个数的设计操作。
方法
- 禁止主程序类中通过 new 实例化对象
正常来说,定义了类之后,如果在主程序类之中利用 new 进行实例化的话,其个数是无法进行限制的。
class Singleton {public void print() {System.out .println("Hello,World")}
}
public class JavaDemo {public static void main(String args[]) {Singleton instanceA = new Singleton();Singleton instanceB = new Singleton();Singleton instanceC = new Singleton();instanceA.print();instanceB.print();instanceC.print();}
}
那么首先就应该禁止单例类在主程序类中的实例化,我们知道,在主程序中的实例化是通过调用构造方法来实现的。而所有的类又默认提供的无参构造,因此首先应在类定义中,私有化构造方法。
private Singleton() {} // 构造方法私有化
这样,我们在若依然主程序类中使用 new 来实例化对象时,就会报错
错误: Singleton() 可以在 Singleton 中访问 private
instance = new Singleton();
- 实例化放在单例类中进行
无法在外部类中直接使用 new 进行实例化后,实例化过程只能放在自身类中进行,因此可以定义一个私有化成员属性,即声明一个单例类引用。
private Singleton instance;
但外部类依然要有途径来进行访问,因此可以使用 static 属性进行标注,
private static Singleton instance;
又要求控制其数量只能有一个,因此使用 final 定义
private static final Singleton INSTANCE = new Singleton();
该引用的赋值放在一个方法中,该方法也要定义为类方法:
public static Singleton getInstance() {return INSTANCE;
}
两种单例设计模式
饿汉式
在系统加载类的时候就会自动提供有 Singleton 类的实例化对象。
方法示例中所实现的就是饿汉式:
class Singleton {private static final Singleton INSTANCE = new Singleton();private Singleton() {} // 构造方法私有化public static Singleton getInstance() {return INSTANCE;
}public void print() {System.out .println("Hello,World")}}
public class JavaDemo {public static void main(String args[]) {Singleton instance = null; // 仍可声明对象instance = Singleton.getInstance();instance.print();}
}
懒汉式
在第一次使用的时候才进行实例化对象处理.
这样在定义时就不能使用 final 来限制个数了,而是在获取实例方法中增加判断来限制个数。
class Singleton {private static Singleton instance;private Singleton() {} // 构造方法私有化public static Singleton getInstance() {if (instance == null){ // 第一次使用instance = new Singleton() ; // 实例化对象}return instance;
}public void print() {System.out .println("Hello,World")}}
public class JavaDemo {public static void main(String args[]) {Singleton instance = null; // 仍可声明对象instance = Singleton.getInstance();instance.print();}
}
面试题:编写一个Singleton程序,并说明其主要特点?
- 代码如上,可以把懒汉式(后面需要考虑到线程同步问题) 和饿汉式都写上;
- 特点:构造方法私有化,类内部提供 static 方法获取实例化对象,这样不管外部如何操作永远都只有一个实例化对象提供。
多例设计模式
多例设计指的是可以保留有多个实例化对象,例如:如果现在要定义一个描述性别的类,那么该对象只有两个:男、 女。或者描述颜色基色的类,可以使用: 红色、绿色、蓝色。这种情况下可以利用多例设计来解决。
class Color { // 定义描述颜色的类private static final Color RED = new Color("红色");private static final Color GREEN = new Color("绿色");private static final Color BLUE = new Color("蓝色");private String title;private Color(String title) { // 构造方法私有化this.title = title;}public static Color getInstance(String color){switch(color){case "red": return RED;case "green": return GREEN;case "blue" : return BLUE;default : return null;}}public String toString(){return this.title;}
}
public class JavaDemo {public static void main(String args[]) {Color c = Color.getInstance("green");System.out.println(c);}
}
多例设计与单例设计的本质是相同的,一定都会在内部提供有 static 方法以返回实例化对象。
相关文章:
![](https://img-blog.csdnimg.cn/2f319df5c15549c0bf1747892af94fd1.png)
Java复习-25-单例设计模式
单例设计模式 目的(使用场景) 在实际开发下,会存在一种情况:某一种类在程序的整个生命周期中,只需要实例化一次就足够了。例如,系统数据类,由于操作系统只有一个,因此在程序初始化…...
![](https://img-blog.csdnimg.cn/a8f9c0a16e7a4126a4664ef7a99bbe49.jpeg)
博客系统自动化测试项目实战(测试系列9)
目录 前言: 1.博客前端页面测试用例图 2.测试用例的代码实现 2.1登录页面的测试 2.2博客列表页面的测试 2.3写博客测试 2.4博客详情页面的测试 2.5已发布博客的标题和时间的测试 2.6注销用户的测试 结束语: 前言: 之前小编给大家讲…...
![](https://www.ngui.cc/images/no-images.jpg)
华纳云:Linux的底层体系结构是怎样的
Linux操作系统的底层体系结构是一个开源的Unix-like操作系统内核,通常称为Linux内核(Linux Kernel)。下面是Linux底层体系结构的主要组成部分和工作原理: 内核(Kernel): Linux的核心部分是内核,它是操作系统…...
![](https://img-blog.csdnimg.cn/220798f861264bbc92c0f6864b8af7bd.png)
SpringMVC常用注解介绍及参数传递说明
前言 上一篇文章介绍了SpringMVC是什么以及它的工作流程和核心组件,介绍入门示例时,提到了RequestMapping注解,那么这篇文章就来介绍SpringMVC中更多的常用的注解,以及它的参数传递。 一. SpringMVC常用注解 1.1 RequestParam …...
![](https://www.ngui.cc/images/no-images.jpg)
4 个你可能不知道的 Python 迭代工具过滤器函数
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 当您只想循环遍历迭代器、检索序列中的元素并处理它们时,这些元素特别有用 - 所有这些都无需将它们存储在内存中。今天我们将学习如何使用以下四个迭代工具过滤器函数: filterfalsetakewhiledr…...
![](https://img-blog.csdnimg.cn/img_convert/6ec90943d79ce91198eea522892e3a4a.png)
Scrapy简介-快速开始-项目实战-注意事项-踩坑之路
scrapy项目模板地址:https://github.com/w-x-x-w/Spider-Project Scrapy简介 Scrapy是什么? Scrapy是一个健壮的爬虫框架,可以从网站中提取需要的数据。是一个快速、简单、并且可扩展的方法。Scrapy使用了异步网络框架来处理网络通讯&…...
![](https://www.ngui.cc/images/no-images.jpg)
lightdb 支持兼容Oracle的to_clob函数
文章目录 概述案例演示 概述 在信创移植的SQL语句中,有来源于Oracle数据库的SQL语句。 在ORACLE PL/SQL包中,你可以使用TO_CLOB(character)函数将RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB值转换为CLOB。 因此在LightDB 23.3版本中实现了…...
![](https://img-blog.csdnimg.cn/49003d19702f43c9a233b53cf361faf0.png)
ES6中let和const关键字与var关键字之间的区别?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量作用域(Scope):⭐ 变量提升(Hoisting):⭐ 重复声明:⭐ 初始化:⭐ 全局对象属性:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#…...
![](https://img-blog.csdnimg.cn/b09b7e25b4b44ccebcb0473cc516dea0.png)
Python中的异常处理3-1
Python中的异常指的是语法上没有错误,但是代码执行时会导致错误的情况。 1 抛出异常 在图1所示的代码中,要求用户输入一个数字,该代码在语法上没有错误。 图1 出现异常的代码 但是运行该代码之后,如果用户输入的是数字…...
![](https://img-blog.csdnimg.cn/ff56a740fee44bb888bcbbf08a64a055.png#pic_center)
大数据与AI:解析智慧城市的幕后英雄
文章目录 1. 智慧城市的定义与发展2. 大数据:智慧城市的基石2.1 大数据的概念与重要性2.2 大数据的应用案例2.2.1 智能交通管理2.2.2 能源效率优化2.2.3 城市规划与土地利用 3. 人工智能:智慧城市的大脑3.1 人工智能的概念与重要性3.2 人工智能的应用案例…...
![](https://img-blog.csdnimg.cn/ac0d9de9f200484da0caba6fb43310a0.png)
将钉钉机器人小程序从一个公司迁移至另一个公司的步骤
引言: 由于我们以前开发的钉钉小程序都在一个公司,想在想应用到另一个公司,这就牵扯出了关于钉钉小程序迁移方面的具体步骤。下面是具体步骤: 1、创建一个钉钉小程序 在这一步你需要有钉钉开放平台的开发者权限,具体…...
![](https://img-blog.csdnimg.cn/cbfe27d48b0e4f4395e4256c3133df50.png)
j解决Ubuntu无法安装pycairo和PyGObject
环境:虚拟机Ubuntu20.04,vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04,vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp,选择Python3.8.10的环境,自动激活Python 最近在搞无人…...
![](https://www.ngui.cc/images/no-images.jpg)
PBI 背景全屏规律呈现水印
想要在Power BI报表中实现全屏规律呈现斜角水印的效果,并且显示的值是用户登录的email的话,目前Power BI desktop的背景“Background”功能中暂时没有支持的直接设置方法。但是基于测试和研究,Power BI市场中有一个叫“HTML Content”的custom visual提供,它支持嵌入一些HT…...
![](https://www.ngui.cc/images/no-images.jpg)
2023年全国职业院校技能大赛信息安全管理与评估网络安全事件响应、数字取证调查、应用程序安全任务书
全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块二 网络安全事件响应、数字取证调查、应用程序安全 比赛时间及注意事项 本阶段比赛时长为180分钟,时间为13:30-16:30。 【注意事项】 比赛结束,不得关机;选手首先需要…...
![](https://img-blog.csdnimg.cn/91d59900c69a4d699d0c456ab3703e25.png)
浙大陈越何钦铭数据结构08-图7 公路村村通【循环和最小堆版】
题目 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)…...
![](https://img-blog.csdnimg.cn/img_convert/c32c69917ad2340bf1558b9ff3d80111.png)
Linux 部署1Panel现代化运维管理面板远程访问
文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…...
![](https://www.ngui.cc/images/no-images.jpg)
用百度云怎么重装电脑系统
用百度云怎么重装电脑系统 随着云计算技术的飞速发展,百度云成为了人们日常生活中不可或缺的一部分。百度云不仅提供了强大的文件存储和传输功能,还可以帮助人们轻松地重装电脑系统。下面就让我们来介绍一下如何用百度云重装电脑系统。 步骤一…...
![](https://img-blog.csdnimg.cn/ad01e0c14d41457a81c7f6d7847a6373.png)
SpringCloud环境搭建及入门案例
技术选型: Maven 3.8.4SpringBoot 2.7.8SpringCloud 2021.0.4SpringCloudAlibaba 2022.0.1.0Nacos 2.1.1Sentinel 1.8.5 模块设计: 父工程:SpringCloudAlibaba订单微服:order-service库存微服:stock-service 1.创建…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是序列化和反序列化?
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种常用的数据交换格式,用于在不同系统之间传输和存储数据。 JSON是一种轻量级的数据交换格式,它使用易于理解的键值对的形式表示数…...
![](https://img-blog.csdnimg.cn/58283059a88c4689a6a71939dff439ea.gif#pic_center)
React 消息文本循环展示
需求 页面上有个小喇叭,循环展示消息内容 逻辑思路 设置定时器,修改translateX属性来实现滚动,判断滚动位置,修改list位置来实现无限滚动 实现效果 代码 /** Author: Do not edit* Date: 2023-09-07 11:11:45* LastEditors: …...
![](https://img-blog.csdnimg.cn/11fd2975dfef41ac82eb46bb056661f0.png)
java获取jenkins发布版本信息
一.需求: 系统cicd发布时首页需要展示jenkins发布的版本和优化内容 二.思路: 1.jenkins创建用户和秘钥 2.找到对应构建任务信息的api 3.RestTemplate发起http请求 三.实现: 1.创建用户和token 2.查找jenkins API 创建 Job POST http://localhost…...
![](https://img-blog.csdnimg.cn/img_convert/c4f1804585b6c87f550702dff2197c1b.png)
java八股文面试[数据库]——可重复读怎么实现的(MVCC)
可重复读(repeatable read)定义: 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。 MVCC MVCC,多版本并发控制, 用于实现读已提交和可重复读隔离级别。 MVCC的核心就是 Undo log多版本链 …...
![](https://www.ngui.cc/images/no-images.jpg)
cl 和 “clangtidy“分别是什么?是同一样东西吗?
作者:gentle_zhou 原文链接:cl 和 "clangtidy"分别是什么?是同一样东西吗?-云社区-华为云 先说结论:这两个是不同的工具,cl是编译器,clangtidy是代码检查工具,它们不是一…...
![](https://www.ngui.cc/images/no-images.jpg)
ubuntu22.04开机自启动Eureka服务
ubuntu22.04开机自启动Eureka服务 1、创建启动脚本eurekaService.sh #我们把启动脚本放在/usr/software目录下 cd /usr/software vim eurekaService.sheurekaService.sh内容为 #!/bin/sh # this is a eurekaService shell to startup at the mechian power on.echo "eu…...
![](https://img-blog.csdnimg.cn/cc5a3c1828f44a93bfa501dab956a2a4.png)
【 OpenGauss源码学习 —— 列存储(analyze)(三)】
列存储(analyze) acquire_sample_rows 函数RelationGetNumberOfBlocks 函数BlockSampler_Init 函数anl_init_selection_state 函数BlockSampler_GetBlock 函数ReadBufferExtendedPageGetMaxOffsetNumber 函数HeapTupleSatisfiesVacuum 函数heapCopyTuple…...
![](https://img-blog.csdnimg.cn/e3c4ecf9059a4be0816ccb3892181172.png)
Element Plus table formatter函数返回html内容
查看 Element Plus table formatter 支持返回 类型为string 和 VNode对象; 若依全局直接用h函数,无需引用 下面普通基本用法:在Element Plus中,你可以使用自定义的formatter函数来返回VNode对象,从而实现更灵活的自定…...
![](https://www.ngui.cc/images/no-images.jpg)
c++ mutable
mutable 可变的,易变的 跟 constant(既C中的const)是反义词作用: 保持常量对象中大部分数据成员仍然是“只读”的情况下,实现对个别数据成员的修改使类的const函数可以修改对象的mutable数据成员。 注意事项ÿ…...
![](https://img-blog.csdnimg.cn/b0c2231e00d345e5b50ddaa932635281.png)
element-plus 踩的坑
原来node版本是16.17.0,装element-plus死活装不上,结果要把node版本升级到18以上,真坑呀,也没人告诉我要这么干...
![](https://www.ngui.cc/images/no-images.jpg)
Python、Rust中的协程
协程 协程在不同的堆栈上同时运行,但每次只有一个协程运行,而其调用者则等待: F启动G,但G并不会立即运行,F必须显式的恢复G,然后 G 开始运行。在任何时候,G 都可能转身并让步返回到 F。这会暂停 G 并继续…...
![](https://img-blog.csdnimg.cn/b75126c70c144fcba83cf0082301f43a.png)
Vuepress样式修改内容宽度
1、相关文件 一般所在目录node_modules\vuepress\theme-default\styles\wrapper.styl 2、调整宽度,截图中是已经调整好的,在我电脑上显示刚刚好。...
![](https://img-blog.csdnimg.cn/20201119202729270.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_16,color_FFFFFF,t_70#pic_center)
网站写手怎么做/电脑培训班有哪些科目
很多平台都有点赞功能,今天提供的这个思路可用于很多平台,希望可以掌握该技巧,实现你自己的点赞器。本案例目标为虎嗅 24 小时频道点赞。 爬虫小课系列文章导读链接 第一篇:Python 爬虫小课 1-9 宝妈程序媛福利-育儿网问答数据抓取 第二篇:Python 爬虫小课 2-9 中国妖怪…...
![](/images/no-images.jpg)
做网站的公司哪家强/关键词优化搜索排名
Topic modelling for humans 看着gensim这个标题都觉得霸气,从文本预处理,特征提出到主题聚类等,基本上包含了文本处理的所有功能。Corpora and Vector Spaces 语料与向量空间,这一节主要讲如何把文本从词变为bag-of-word。中文的…...
![](/images/no-images.jpg)
简单扁平化风格后台网站模板/网站友情链接
ExtentReports是一种想对美观的报告,并且查看的内容比较丰富 1,安装mongoDB,启动mongo服务 2,代码添加ExtentManager,ExtentTestNGITestListener这两个类, 3,运行的testng.xml中添加监听 4,mave…...
![](/images/no-images.jpg)
成都最新疫情发布/seo推广专员招聘
1093 字符串AB (20 分) 题目链接 算法分析 依次遍历两个字符串,用on数组标记是否输出过 值为1表示输出过,值为0表示没有输出过. 代码实现 #include<bits/stdc.h> using namespace std; #define N 150 int on[N]; int main(){string a, b;getline(cin, a);getline(ci…...
![](/images/no-images.jpg)
网站discuz迁移怎么做/seo网站的优化流程
好长的的解释啊啊啊啊啊,看得脑袋有点胀,不看了,反正都说基本用不上,我就先做个记录,等过几天再看。转载于:https://blog.51cto.com/13502993/2147847...
![](/images/no-images.jpg)
做外贸一般用哪些网站好/饥饿营销案例
这两年少儿编程教育如火如荼,科技和政策的推动让家长越来越意识到编程的重要性。随着人工智能的发展和应用深入,编程也慢慢将成为每一个孩子的必备基础技能。但与此同时,也有很多国内家长对少儿编程这个词比较陌生,很多家长对少儿…...