创建型设计模式

2023-11-01

“ 为什么说支持懒加载的双重检测不比饿汉式更优?”

单例模式

一个类只允许创建一个对象(或实例),即单例模式
为什么使用单例:

  1. 处理资源访问冲突
  2. 表示全局唯一类,从业务概念上,有些数据在系统种只应该保存一份,就比较适合设计为单例类。

实现一个单例

  1. 构造函数需要是private访问权限的,这样才能避免外部通过new创建实例
  2. 考虑对象创建时的线程安全问题
  3. 考虑是否支持延迟加载
  4. 考虑getInstance()性能是否高、是否加锁
  • 饿汉式
    在类加载的时候,instance静态实例就已经创建饼初始化好了,所以instance实例的创建是线程安全的。不过这样的实现方式不支持延迟加载(即在真正用到时再创建实例)
  • 懒汉式
    懒汉式相对于饿汉式的优势时支持延迟加载,但给getInstance()加了所,会导致这个函数的并发度很低,如果这个函数被频繁用到,那频繁加锁、释放锁及并发度低等问题,会导致性能瓶颈。
  • 双重检测
    饿汉式不支持延迟加载,懒汉式有性能问题不支持高并发。双重检测既支持延迟加载又支持高并发;在这种实现方式种,只要instance被创建即便再调用getInstance()函数也不会再进入到加锁逻辑中了,所以这种实现方式解决了懒汉式并发度低的问题

单例存在的问题

大部分情况下,我们在项目中使用单例,都是用它来表示一些全局唯一类,比如配置信息类、连接池类、ID生成器类。单例模式不需要创建对象,直接通过类似getInstance()的方法就可调用,但这种使用方法有点类似硬编码,会带来许多问题。
但为了保证全局唯一,除了使用单例,我们还可以用静态方法来实现,这也是项目开发中经常用到的一种实现思路。

如何设计试下一个集群环境下的分布式单例模式

–占坑–

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建型设计模式 的相关文章

  • python语法(高阶)-设计模式(单例模式)

    参考内容 黑马程序员
  • 小谈设计模式(1)—总序

    小谈设计模式 1 总序 专栏地址 开始操作 设计模式总论 设计模式是什么 组成要素 模式名称 问题描述 解决方案 效果描述 设计模式有什么作用 提供可重用的解决方案 提高代码的可读性和可维护性 促进代码的可扩展性 提高代码的灵活性和可重用性
  • 设计模式的 C++ 实现---工厂方法模式(二)

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 前言 对于工厂方法模式 当增加新产品时 也需要对应增加一个工厂类 可以使用模版进行封装 减少代码工作量 实现举例 产品抽象基类 class Animal pu
  • Java设计模式:装饰者模式(Decorator Pattern)

    装饰者模式 涉及的重要设计原则 类应该对扩展开放 对修改关闭 装饰者模式定义 装饰者模式动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 UML类图 装饰者模式事例 咖啡店 咖啡种类 1 深焙咖啡 DarkRoa
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 程杰“大话设计模式”中的设计原则

    单一职责原则 SRP 就一个类而言 应该仅有一个引起它变化的原因 如果一个类承担的职责过多 就等于把这些职责耦合在了一起 一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力 这种耦合会导致脆弱的设计 当发生变化时 设计会遭受到意想不到
  • 设计模式七大原则

    1 设计模式的目的 编写软件过程中 程序员面临着来自耦合性 内聚性以及可维护性 可扩展性 重用性 灵活性 等多方面的挑战 设计模式是为了让程序 软件 具有更好 1 代码重用性 即 相同功能的代码 不用多次编写 2 可读性 即 编程规范性 便
  • HeadFirst 设计模式学习笔记10——MVC分析

    1 M V C Model View Controller 模式 视图 控制器 这是一种范型 模型对象正是应用系统存在的理由 你设计的对象 包含了数据 逻辑和其他在你的应用领域创建定制的类 视图通常是控件 用来显示和编辑 控制器位于二者中间
  • Tomcat 系统架构与设计模式之工作原理篇

    本文以 Tomcat 5 为基础 也兼顾最新的 Tomcat 6 和 Tomcat 4 Tomcat 的基本设计思路和架构是具有一定连续性的 Tomcat 总体结构 Tomcat 的结构很复杂 但是 Tomcat 也非常的模块化 找到了 T
  • DDD专家张逸:构建领域驱动设计知识体系

    张逸 读完需要 5分钟 速读仅需 2 分钟 领域驱动设计专家 曾就职于 ThoughtWorks 作为 Lead Consultant 为客户提供架构设计 大数据分析 持续交付 代码质量 敏捷管理等咨询服务 著译作包括 软件设计精要与模式
  • 设计模式-享元模式

    一 概念 如果在一个系统中存在多个相同的对象 那么只需要共享一份对象的拷贝 而不必为每一次使用都创建新的对象 目的是提高系统性能 上面的概念乍一听好像单例模式其实不是 单例模式只保存一个对象 但是这里可以有很多个不同对象 但是每个对象只有一
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • 二十四种设计模式之策略模式

    一 什么是策略模式 简单来说 策略模式是将每一个算法封装到拥有共同接口的不同类中 使得算法可以在不影响客户端的情况下发生变化 也可以理解为可供程序运行时选择的 不同的类 不同的解决方案 策略模式的特点 高内聚低耦合 可扩展 遵循ocp原则
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • C++单例模式

    pragma once namespace utility 需要拼接一下命名空间 utility define SINGLETON x friend class utility Singleton
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • 系列一、 单例设计模式

    一 单例设计模式 1 1 概述 单例模式 Singleton Pattern 是Java中最简单的设计模式之一 这种类型的设计模式属于创建者模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只
  • C++设计模式 --1.工厂模式和单例模式

    文章目录 1 工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 2 单例模式 懒汉式 饿汉式 1 工厂模式 简单工厂模式

随机推荐

  • windows10+libtorch1.0.0 cpu版本+opencv4.0.0 cmake安装编译

    目录 前期准备 配置CmakeLists cmake编译所需目录结构 cmake编译 参考 前期准备 下载cmake https cmake org download 安装时手动更改选项以添加到环境变量中 下载libtorch https
  • idea简便导入jar包的方法

    idea简便导入jar包的方法 Step1 2021 12 18 15 21 19 复制准备好的jar包 Step 2 2021 12 18 15 21 20 在需要该jar包的项目中创建一个文件夹 一般习惯文件夹的名字为lib Step
  • case when 多个条件 以及case when 权重排序

    1 case when 多个条件 语法 SELECT nickname user name CASE WHEN user rank 5 THEN 经销商 WHEN user rank 6 THEN 代理商 WHEN user rank 7
  • 【计算机视觉这一年】万字长文盘点近百篇代表论文、应用和市场

    新智元导读 The M Tank发布了一份对计算机视觉领域最近一年进展的报告 A Year in Computer Vision 详述了四大部分的内容 包括 分类 定位 目标检测 目标追踪 分割 超分辨率 自动上色 风格迁移 动作识别 3D
  • 头哥作业:统计字母数量

    统计字母数量 输入格式 输出格式 示例 1 任务描述 读取附件是一篇英文短文 请编写程序统计这篇短文前 n 行中每一个英文字母出现的次数 结果按次数降序排列 次数相同时 按字母表顺序输出 若 n 值大于短文行数 输出整篇文章中每一个英文字母
  • windows安装JDK、maven 和 IDEA

    一 JDK安装 Java程序必须运行在JVM之上 或者说java exe就是JVM 所以 使用Java的第一件事情是安装JDK 1 获取安装包 官方网址 https www oracle com java technologies down
  • 距离公式详解

    在做分类时常常需要估算不同样本之间的相似性度量 SimilarityMeasurement 这时通常采用的方法就是计算样本间的 距离 Distance 采用什么样的方法计算距离是很讲究 甚至关系到分类的正确与否 本文的目的就是对常用的相似性
  • 一种通过篡改特定代码数据修复嵌入式产品BUG的方法

    一 前言 在嵌入式产品开发中 难以避免地会因为各种原因导致最后出货的产品存在各种各样的BUG 通常会给产品进行固件升级来解决问题 记得之前在公司维护一款BLE产品的时候 由于前期平台预研不足 OTA参数设置不当 导致少数产品出现不能OTA的
  • Wetab 标签页:内置多种免费实用优雅小组件的浏览器主页和起始页

    Wetab 是什么 Wetab 是一款基于浏览器的新标签页产品 主张辅助用户打造一个兼具效率与美观的主页 nbsp Wetab 的核心特色便是内置了多种实用 优雅的小组件 今天这篇 主要按照分类详细介绍 nbsp Wetab 中的各个小组件
  • c++中的sort函数的头文件及详细用法

    头文件为 include
  • centos7 mysql server_centos7 mysqlserver 安装过程

    官网下载安装mysql server wget http dev mysql com get mysql community release el7 5 noarch rpm rpm ivh mysql community release
  • ​通过VS Code远程访问局域网Linux

    来源 配置vscode远程到Linux环境下 z417 博客园 首先 VS Code安装插件remote SSH 其次 修改C Users xxx ssh config Host JetsonNano HostName 192 168 13
  • Flutter快速入门学习(二)

    目录 Dart介绍 一些Dart的重要概念 Dart语法学习 变量 内建类型 Number String Boolean List Set Map Symbol 函数 参数类型 可选参数 必选参数 函数作为另一个函数的参数 匿名函数 运算符
  • vue使用computed计算属性,监听初始化路由,页面高度

    vue中computed计算属性 页面高度自适应问题 div div
  • 王者S19服务器维护时间表,王者荣耀s19buff刷新时间一览 红蓝BUFF刷新间隔是多久...

    王者荣耀S19赛季加大了打野位对战局的影响 因此熟悉红蓝BUFF的刷新时间非常重要 无论是反BUFF还是拿自家BUFF都应该清楚刷新时间点 今日光耀菌就为大家带来了红蓝BUFF的刷新时间表 快来了解一番吧 王者荣耀s19赛季红蓝BUFF刷新
  • javaScript-----数组使用字符串作为下标

    原文地址 http blog csdn net chenssy article details 7366160 首先Array是从Object那里继承下 它具备Object所有的功能和特性 下面是Object的情况 html view pl
  • TypeScript void 无返回值

    void 表示没有任何类型 当一个函数没有返回值时 通常会返回 void 有值则会返回指定值类型 void 类型 没有返回值 function showMsg void console log 显示消息 不能返回数据 会报错 return
  • Android开发从入门到精通 章节一 : 环境+IDE

    Android开发从入门到精通 章节一 环境 IDE 接下来带领大家踏入Android编程的世界 跟着我的文章一起迈入移动端开发的世界 Android官网 https developer android google cn index ht
  • qt 嵌入web页面_Qt与Web混合开发(一)--简单使用

    目录 放个目录方便预览 目录是从博客复制过来的 点击会跳转到博客 前言 Qt与Web混合开发 系列文章 主要讨论Qt与Web混合开发相关技术 这类技术存在适用场景 例如 Qt项目使用Web大量现成的组件 方案做功能扩展 Qt项目中性能无关
  • 创建型设计模式

    为什么说支持懒加载的双重检测不比饿汉式更优 单例模式 一个类只允许创建一个对象 或实例 即单例模式 为什么使用单例 处理资源访问冲突 表示全局唯一类 从业务概念上 有些数据在系统种只应该保存一份 就比较适合设计为单例类 实现一个单例 构造函