极简java实现理解单例模式核心

2023-11-06

问:单例模式意义:

在项目中,有的对象只需要存在一个就足够了,多创建对象则会浪费资源,单例模式可以保证项目对象只存在一个,且不会被多次创建。

java实现例子(最少代码):
public class Singleton {
    public static Singleton instance  = new Singleton();
    private Singleton(){
    }
}
问:为什么自己的类里会有一个自己的静态实例?

答:首先因为静态关键字可以保证创建代码只执行一次,其次使用public关键字可以保证直接通过类名访问,比较方便。

问:为什么构造器私有?

答:防止在其他地方实例化新的对象,同时也有标记的功能,在实例化时编译器会报错,提醒程序员该类是单例模式。

问:为什么网络上其他教程里的单例模式中,静态实例的关键字是private,而不是public?而且还有一个获取静态实例的public方法?

答:首先本篇的重点是用最简java代码实现单例模式,且单例模式的核心就是静态实例和构造器私有,只要有这两个存在就可以实现单例。

用关键字private描述静态实例,添加一个获取静态实例的public方法取获取实例,优点比起直接获取实例,使用方法更不容易产生歧义。

方法的存在来有一个原因:
容易针对不同的情况而增加请求对象方式的灵活性(例如懒汉式和饿汉式)。

如下所示:
public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

极简java实现理解单例模式核心 的相关文章

  • 何时/为何使用/定义接口[重复]

    这个问题在这里已经有答案了 可能的重复 何时最好使用 java 中的接口 https stackoverflow com questions 2586389 when best to use an interface in java Hi
  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • 如何让Spring RabbitMQ创建一个新的队列?

    根据我对rabbit mq的 有限 经验 如果您为尚不存在的队列创建新的侦听器 则会自动创建该队列 我正在尝试将 Spring AMQP 项目与rabbit mq 一起使用来设置侦听器 但出现错误 这是我的 xml 配置
  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • JavaFX Platform.runLater 的使用以及从不同线程访问 UI

    我有几个问题Platform runLater 我有一个 JavaFX 应用程序类 在这个类中 我运行一个线程 该线程从网络套接字读取数据 现在当我创建一个新的Stage在线程内部 系统抛出异常 JavaFX 事件调度程序线程和我的网络读取
  • 实现与扩展:何时使用?有什么不同?

    请用易于理解的语言进行解释或提供某些文章的链接 extends is for 延伸一类 implements is for 实施一个接口 接口和常规类之间的区别在于 在接口中您不能实现任何声明的方法 只有 实现 接口的类才能实现方法 C 中
  • 在 Hibernate 中创建 UPDATE RETURNING 查询

    在 Oracle 中 我们可以创建一个更新查询 该查询将使用 RETURNING 子句返回更新的记录 Hibernate中有类似的功能吗 除了数据库生成的值之外 Hibernate 显然不需要返回更新的实例 因为对象传递给Session s
  • 如何在 Struts 2 OGNL 中将参数传递给方法调用

    我想使用属性作为对象方法的参数
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • 从关卡堆栈中获取相对比例的数学

    为这个可怕的标题道歉 我花了 10 分钟试图用一句话来解释这一点 但失败了 虽然提示这个问题的应用程序是用Java Android 编写的 但我认为它非常通用并且适用于任何语言 欢迎使用伪代码 或简单的英语 回复 我不确定是否应该标记所有通
  • Java 泛型:如何为泛型类型指定类类型?

    我有一个 POJO 指定为 MyClass u where U是泛型类型参数 我正在尝试编写一个接受类引用的实用方法Class u
  • 从 sbt 程序集运行 uber jar 会导致错误:无法找到或加载主类

    我有一个使用 sbt 程序集插件打包为 uber jar 的 Spark 作业 这build sbt指定一个可运行的 main 作为生成的 uber jar 的目标 mainClass in assembly Some com foo Ba
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • 不要模拟值对象:过于通用的规则,没有解释

    以下是 Mockito 单元测试框架的引用 不要模拟值对象 为什么有人会想要这样做呢 因为实例化对象太痛苦了 gt 无效 原因 如果创造新的装置太困难 那就是一个迹象 代码可能需要一些认真的重构 另一种方法是创建 价值对象的构建者 有一些工
  • 无法映射 ftl 文件中的 jsonRequest 属性

    我想在 FTL 文件中映射下面的 json 文件市场和子市场字段 但是当我尝试下面的代码时 它没有映射 有人可以帮助我吗 我从 2 天开始就无法映射它 Json请求 ProcessOrderRequest prevalidationMode
  • 从命令行运行 Maven 插件的语法是什么。

    我看到这里已经有人问过这个问题 如何从命令行执行maven插件 https stackoverflow com questions 12930656 how to execute maven plugin from command line
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • Google Cloud Messaging - 立即收到或长时间延迟收到的消息

    我在大学最后一年的项目中使用谷歌云消息传递 一切正常 但我在使用 GCM 时遇到了一些麻烦 通常 消息要么几乎立即传递 要么有很大的延迟 我读过这篇文章 但我真的认为它不适用于这种情况 GCM 通常会在消息发送后立即传送消息 然而 这并不总
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐

  • Google地图现可按照路况给出出行时间

    在 Google Maps 查询出行路线的时候 不管是公交还是自驾 它都会告诉你一个大概的全部行程需要的时间 不过如果你是在下午 5 点左右从北京出发的话 那个时间显然是痴人说梦 由于 Google Maps 本身在很多城市已经有了交通流量
  • 谷粒商城--整合Elasticsearch和商品的上架

    整合Elasticsearch和商品的上架 一 整合ES ES常用概念 索引 类型 文档是什么 倒排索引 相关度分数score的计算 安装ES和Kibana 快速安装 ES kibana 初步检索 cat ES的增删改查 新增文档 put新
  • 第二天-03-安卓手机的入侵实验

    安卓手机入侵实验 要求 电脑主机与手机模拟器或者真机在当前环境下 网络是畅通的 相互之间可以进行通信 如何进行测试网络环境 我们首先需要确定IP linux通过终端命令 ip a 或者 ifconfig windown下 win加r输入cm
  • Apollo使用404错误问题

    在使用spring项目接入携程 apollo 的时候 报了一个错误 Cause status code 404 Could not find config for namespace appId housing102 cluster def
  • 优化基于FPGA的深度卷积神经网络的加速器设计

    英文论文链接 http cadlab cs ucla edu cong slides fpga2015 chen pdf 翻译 卜居 转载请注明出处 http blog csdn net kkk584520 article details
  • 【开发工具】WebStorm 前端开发神器菜鸟必备,全网最稳定靠谱的安装教程 一镜到底、全程图文并茂、通俗易懂!

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 介绍 WebStorm号称最智能的前端开发IDE 适用于前端开发和相关技术的集成开发
  • Unity世界坐标转换屏幕坐标(详解)

    我们先通过简单的操作实现一下基础的UI跟随物体移动的功能 首先我们在场景中建立一个Canvas并且添加一个图片作为按钮 之后我们添加一个3d物体作为跟随目标 效果如下图所示 我们配置一下UICanvas的属性 书写对应的自定义类并添加至UI
  • 【QT实战】第三章 将类中的成员函数放在多线程中执行

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • css3平移、旋转、倾斜、缩放、动画效果的实现

    HTML代码 div class button div div class canResize esdrtgyjikodrtgujiokpsedtgyhij div div class transition div ul li li li
  • Unity优化总结(持续更新)

    工欲善其事 必先利其器 优先利用性能分析工具快速找出性能瓶颈 从瓶颈入手分析性能问题产生原因 可以事半功倍 尽量减少占用的内存 资源体积 和CPU 计算量 首先着重减少总量才能更好的进行后续细节的优化 总量降低后 性能依旧有问题 那么可以考
  • SpringBoot主类解析(四)

    SpringBoot主类 import org springframework boot Banner import org springframework boot SpringApplication import org springf
  • 51 Job招聘数据分析与可视化

    招聘数据分析与可视化 背景 为了分析现有数据行业的招聘情况 抓取2017年3月14日到2017年5月13日发布在51Job上的数据相关招聘职位116273条信息 并从中筛选出职位是数据分析 数据挖掘 文本挖掘 视觉学习 计算广告 数据开发
  • Spring-AOP的基本介绍以及通过先动态代理方式实现

    前言 本篇的Spring AOP系类文章第一篇详细的讲解了Spring AOP的介绍以及通过先动态代理在使用AOP由浅入深更容易理解 个人主页 尘觉主页 https blog csdn net apple 67445472 type blo
  • 警告当当成错误 may be used uninitialized in this function [-Werror=maybe-uninitialized]

    如果是ubuntu20版本 或者gcc版本太高 可能有些警告会当成错误导致编译出错 error may be used uninitialized in this function Werror maybe uninitialized cc
  • 1600*C. Binary String Copying

    https codeforces com problemset problem 1849 C Binary String Copying 洛谷 解析 对于某个区间x y 他排序之后 最左侧的连续0和最右侧的连续1是不影响排序结果的 假设左侧
  • Java7大数据结构

    Java数据结构 简书
  • FISCO BCOS 联盟链Pro搭建

    FISCO BCOS Pro版本 版本说明 FISCO BCOS 3 0支持Pro版本微服务区块链架构 Pro版本FISCO BCOS包含RPC服务 Gateway服务和节点服务 每个服务均可独立部署和扩容 本章通过单机搭建Pro版本2节点
  • 目标检测模型设计准则

    转载 https mp weixin qq com s 5SjQvRqRct6ClpE2eEcdkw 设计高效 高质量的表达性网络架构一直是深度学习领域最重要的研究课题 当今的大多数网络设计策略都集中于如何集成从不同层提取的特征 以及如何设
  • windows系统下安装linux(centos7)虚拟机详细教程(virtualbox环境)

    目录 一 概念 1 1 什么是镜像 1 2 关于镜像的基本概念 二 centos镜像下载 2 1 centos官网下载镜像 2 2 通过其他官网下载镜像 三 下载virtualbox 3 1 为什么要使用virtualbox 3 2 下载v
  • 极简java实现理解单例模式核心

    问 单例模式意义 在项目中 有的对象只需要存在一个就足够了 多创建对象则会浪费资源 单例模式可以保证项目对象只存在一个 且不会被多次创建 java实现例子 最少代码 public class Singleton public static