Java单例模式的写法及作用介绍

news2024/11/20 6:33:07

在创建型设计模式中,我们第一个学习的是单例模式(Singleton Pattern),这是设计模式中最简单的模式之一。

单例是什么意思呢?

单例就是单实例的意思,即在系统全局,一个类只创建一个对象,并且在系统全局都可以访问这个对象而不用重新创建。

一、单例模式的基本写法

单例模式示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public class Singleton {

  

  //    Singleton类自己持有这个单例对象

   private static Singleton instance = new Singleton();

  

   //   构造方法设置为私有,避免在Singleton类外部创建Singleton对象

   private Singleton() {}

  

   //   提供获取单例对象的静态方法

   public static Singleton getInstance() {

      return instance;

   }

  

   public void hello() {

      System.out.println("Hello!");

   }

}

使用:

1

2

Singleton obj = Singleton.getInstance();

obj.hello();

分析SingleObject类的特征:

  • SingleObject类的构造方法是私有的,这样可以保证只能在SingleObject类内部才能创建对象,而无法在类外部创建SingleObject对象。
  • SingleObject类中有一个instance成员属性,它用来持有这个SingleObject对象。
  • SingleObject类提供了一个静态方法getInstance,它可以让我们在任何可以访问到SingleObject类的地方,都可以使用SingleObject.getInstance()来获取到这个SingleObject对象。

二、单例模式的作用

单例模式有什么用呢?

1. 控制对象的数量

当你编写了一个类提供给其他人调用时,对方看到是一个类,很有可能第一反应是尝试new一下。

你自己编写的类你自己是清楚如何使用的,在整个系统内这个类只需要创建一个对象就够了,但对方可能并不清楚。

这时候你可以把这个类编写为单例形式,把构造方法私有化,让对方无法通过new来创建对象,只能使用getInstance来获取。

这个模式可以帮助你有效的控制对象的数量,毕竟,有的类其内部实现复杂,如果频繁创建销毁对象,可能还是很耗费服务器资源的。

2.全局访问

单例模式的特点是单例类自己持有这个单例对象,并且提供一个静态方法可在全局获取到这个单例对象。

如果没有单例模式的情况下,我们一般是在代码A处创建这个对象,在代码B处如果也要使用这个对象,就需要将这个对象进行参数传递。为了避免传来传去,我们可能会写个Holder类,把这个对象放在Holder的成员变量中。

而单例模式的这个优点是,我们可以避免这样的困扰,直接从单例类中获取。

来源:https://www.weidianyuedu.com

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

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

相关文章

友嘉银行坎坷的云原生之路

随着数字化浪潮的来临,云原生技术越来越火。云原生技术的持续更新,无一不在催促传统行业重塑业务体系以及产业生态的转型升级。说到云原生,目前已被认为是云计算最重要的发展方向,它拥有更优雅的架构、更灵活的调度、更完善的治理…

QT—常用窗口部件

一、QLabel 新建一个QWidget项目,设置基类为QWidget 1.显示文本 调用setText函数编辑要显示的文本,传入一个const QString类型的参数 例如: ui->TxtLabel->setText("Label文本,12345678"); 其中TxtLabel是一…

web大作业 web前端课程设计 web前端课程设计代码 web课程设计 HTML网页制作代码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【Android Room 库基础入门】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、前言二、Room 主要组件三、Room 基础入门3.1 引入 Room 库到项目3.2 Room 使用示例3.2.1 定义数据实体类3.3.2 定义数据访问对象(DAO)3.3…

如何成为一名IT咨询顾问?

咨询顾问这个工作,很多人都很羡慕,在别人看来咨询顾问的工作时间自由,可以到处出差和旅游,能够认识企业各种层面的人,见多识广。实际情况真的这么轻松吗?什么样的人适合做咨询顾问?做咨询顾问需…

《计算机网络》2022年期末试卷

《计算机网络》期末试卷2022年A卷

synchronized 关键字

文章目录一、synchronized 的特性互斥可重入二、 synchronized 使用示例三、 java标准库的线程安全类四、 死锁可重入死锁相互争夺锁哲学家就餐问题死锁的四个必要条件一、synchronized 的特性 互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时…

亚马逊、ebay测评自养号新手应该要怎么做?

如今很多的跨境卖家开始在深入了解测评自养号这块,都想在运营上减低一些成本,多增加一些利润。对于整个测评工作来说,测评技术可谓是非常核心的一个环节,多学习,不要浮躁,这样才能让我们不断提高自己的测评…

Android 3D 魔方游戏的设计与开发

Android 3D 魔方游戏的设计与开发 5.1 Feature 定义 魔方是一个有趣的益智游戏,相信很多人都玩过。本次毕业设计,欲完成的主要的功能如下: (1) 开始游戏:开始一个新的游戏 (2) 返…

Java项目:食品检测管理系统(java+SSM+JavaScript+layui+Mysql)

源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目后台食品检测管理系统; (1)用户管理:用户登录、验证。 (2)任务管理:添加任务、检品受理。 &#xff0…

数学基础从高一开始4、集合的基本运算2

数学基础从高一开始3、集合的基本运算2 目录 数学基础从高一开始3、集合的基本运算2 补集 例2: 总结: 补集 这里补集的符号我打不出来,这里就截图给大家看了啊。 下图是补集的语言表达,图形表达以及符号表达方式&#xff1a…

在无需分叉的情况下模拟任何 SIGHASH 标志

我们开发了一种新颖的方法来模拟任何 SIGHASH 标志,只需在智能合约中编写逻辑即可。它不需要更改协议,因此比每次构思新用例时通过分叉添加硬编码标志更实用和灵活。 SIGHASH 标志 SIGHASH 标志决定交易的哪一部分由签名者签名。具体来说,它…

Redis分布式锁那点事

锁超时问题 在redis分布式锁中,如果线程A加锁成功了,但是由于业务功能耗时时间很长,超过了设置的超时时间,这时候redis会自动释放线程A加的锁。通常我们加锁的目的是:为了防止访问临界资源时,出现数据异常…

【Python学习记录】Numpy广播机制(broadcast)

✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Python学习记录 文章目录一、什么是Numpy广播机制二、Numpy广播应用三、Numpy广播规则一、什么是Numpy广播机制 在Numpy、tensorflow、pytorch中数组有一种广播机制(broadcast), 就是针对两个不同形状的数组进…

【Linux】Linux调试器-gdb使用及git命令行

大家好我是沐曦希💕 文章目录一.预备知识1.背景2.Linux默认行为3.debug和release区别二.使用三.使用git命令行一.预备知识 1.背景 程序的发布方式有两种,debug模式和release模式Linux gcc/g出来的二进制程序,默认是release模式要使用gdb调试…

前端vue面试题(持续更新中)

Watch中的deep:true是如何实现的 当用户指定了 watch 中的deep属性为 true 时,如果当前监控的值是数组类型。会对对象中的每一项进行求值,此时会将当前 watcher存入到对应属性的依赖中,这样数组中对象发生变化时也会通知数据更新 源码相关 g…

Android 10.0 Launcher3双层(抽屉)高斯模糊(毛玻璃)背景功能的实现

1.概述 在进行定制开发的功能需求方面,Launcher3的需求也挺多的,单双层抽屉高斯模糊毛玻璃背景功能也是一个需求功能,最近按照功能需求来开发 双层抽屉高斯模糊毛玻璃效果背景的功能 效果图如图: 2. Launcher3双层(抽屉)高斯模糊(毛玻璃)背景功能的实现的核心代码 package…

基于Python logging 实现日志功能模块(即拿即用)

基于Python实现日志功能模块 在项目开发过程,日志文件是十分重要的,尤其对于程序员后期排查软件问题、发现问题bug及使用记录等更是非常重要。 本文使用部分软件版本如下: PyCharm 2019.3 Python 3.7.3 logging 0.5.1.2 logging logging 模块中包含为应用程序和库实现灵…

科研试剂2702973-69-9,endo BCN-PEG12-COOH,endo BCN-PEG12-acid

(本品应密封避光,储存于阴凉,干燥,通风处,取用一定要干燥,避免频繁的溶解和冻干) ●外观以及性质: endo BCN-PEG12-acid为浅黄色油状,带有 PEG 臂的试剂会增加化合物的亲…

论文投稿指南——中文核心期刊推荐(机械、仪表工业2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…