当前位置: 首页 > news >正文

设计模式-享元模式Flyweight(结构型)

享元模式(Flyweight)

享元模式是一种结构型模式,它主要用于减少创建对象的数量,减少内存占用。通过重用现有对象的方式,如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。

图解

请添加图片描述

角色

  1. 享元工厂:负责创建和管理享元对象,通常包含一个池用于存储和复用已经创建的享元对象
  2. 具体享元:实现抽象元接口,包含内部和外部状态,内部状态可被分享,外部状态由客户端传递
  3. 抽象享元:定义具体享元和非共享享元接口,通常包含设置外部状态的方法
  4. 客户端:使用享元工厂获取享元对象,并通过设置外部状态来操作享元对象。客户端通常不需要关心享元对象的具体实现

代码实现

抽象享元

public interface Connection {void get();
}

具体享元

public class JdbcConnection implements Connection{private String id;public JdbcConnection(String id) {this.id = id;}@Overridepublic void get() {System.out.println("连接ID为:" + this.id);}
}

享元工厂

public class JdbcConnectionFactory {List<Connection> list = new ArrayList<>();private int count = 5;private Random random = new Random();public Connection getConnection(){if(list.size() < count){JdbcConnection jdbcConnection = new JdbcConnection(UUID.randomUUID().toString());list.add(jdbcConnection);return jdbcConnection;}else {int i = random.nextInt(4);return list.get(i);}}
}

客户端

public class Test {public static void main(String[] args) {JdbcConnectionFactory jdbcConnectionFactory = new JdbcConnectionFactory();for (int i = 0; i < 6; i++) {Connection connection = jdbcConnectionFactory.getConnection();connection.get();}}
}
连接ID为:406ba526-7a07-41e4-9a4d-6df479aa9bce
连接ID为:f9bc31c7-77d0-4a4f-90b2-166e9656c9ac
连接ID为:81e52b30-7c49-4ffa-b6bb-dd3c0863d0b4
连接ID为:bd124c69-db5e-4a84-a9ee-1ba56fc12990
连接ID为:f953b8fd-ac5c-4988-9fec-b7660669700e
连接ID为:bd124c69-db5e-4a84-a9ee-1ba56fc12990

最多产生五个连接对象

相关文章:

设计模式-享元模式Flyweight(结构型)

享元模式(Flyweight) 享元模式是一种结构型模式&#xff0c;它主要用于减少创建对象的数量&#xff0c;减少内存占用。通过重用现有对象的方式&#xff0c;如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。 图解 角色 享元工…...

【刷题】LeetCode刷题汇总

目录 一、刷题题号1&#xff1a;两数之和 二、解法总结1. 嵌套循环2. 双指针 一、刷题 记录LeetCode力扣刷题 题号1&#xff1a;两数之和 双循环&#xff08;暴力解法&#xff09;&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {int[] listne…...

树莓派pico入坑笔记,快捷键键盘制作

使用usb_hid功能制作快捷键小键盘&#xff0c;定义了6个键&#xff0c;分别是 ctrlz ctrlv ctrlc ctrla ctrlw ctrln 对应引脚 board.GP4, board.GP8, board.GP13 board.GP28, board.GP20, board.GP17 需要用到的库&#xff0c;记得复制进单片机存储里面 然后是main主程…...

华为鲲鹏应用开发基础:鲲鹏处理器及关键硬件特性介绍(二)

1. 鲲鹏简介 1.1 鲲鹏处理器简介 鲲鹏处理器是华为自研的基于ARMv8指令集开发的数据中心级处理器 1.2 基于鲲鹏主板的多样化计算产品 1.3 基于鲲鹏920的华为TaiShan(泰山) 200服务器 1.3.1 TaiShan 2280服务器内部视图 1.3.2 TaiShan 2280服务器物理结构 1.3.3 TaiShan 2280服…...

Vue.js结合ASP.NET Core构建用户登录与权限验证系统

1. 环境准备2. 创建项目3. Vue配置步骤一: 安装包步骤二: 配置文件步骤三: 页面文件 4. 后台配置 在本教程中&#xff0c;我将利用Visual Studio 2022的强大集成开发环境&#xff0c;结合Vue.js前端框架和ASP.NET Core后端框架&#xff0c;从头开始创建一个具备用户登录与权限验…...

【html】如何利用id选择器实现主题切换

今天给大家介绍一种方法来实现主题切换的效果 效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…...

服务器添加TLS域名证书核子之PKCS编解码

PKCS PKCS(Public Key Cryptography Standards)是一系列的标准,用于定义在公钥密码体系中涉及的一些基本结构和算法。PKCS#1 和 PKCS#8 是两个不同的标准,分别定义了不同的公钥私钥编码和封装格式。 PKCS#1 和PKCS#8区别 PKCS#1 PKCS#1 定义了一种用于RSA算法的公钥和私…...

使用 Selenium 自动化获取 CSDN 博客资源列表

使用 Selenium 自动化获取 CSDN 博客资源列表 在这篇博客中,我将向大家展示如何使用 Selenium 自动化工具来滚动并获取 CSDN 博客资源列表的全部数据。这篇文章的目标是通过模拟用户的滚动操作,加载所有的资源列表项,并提取它们的信息。 项目准备 首先,我们需要安装一些…...

智能制造全闪解决方案,八大痛点,一网打尽

当今&#xff0c;全球制造业面临多重大考验&#xff0c;如个性化需求剧增、成本上升、劳动力短缺及激烈竞争。应对这些挑战&#xff0c;智能制造成为转型关键&#xff0c;借助云技术、大数据、AI等前沿科技推动生产智能化&#xff0c;增强企业竞争力。 中国大力扶持智能制造&am…...

Python学习从0开始——Kaggle深度学习002

Python学习从0开始——Kaggle深度学习002 一、单个神经元1.深度学习2.线性单元示例 - 线性单元作为模型多个输入 3.Keras中的线性单元 二、深度神经网络1.层多种类型的层 2.激活函数3.堆叠密集层4.构建Sequential模型 三、随机梯度下降1.介绍2.损失函数3.梯度下降法1.梯度下降法…...

比利时海外媒体宣发,发稿促进媒体通稿发布新形势-大舍传媒

引言 随着全球化的推进&#xff0c;海外媒体的影响力也日益增强。在这一背景下&#xff0c;比利时海外媒体的宣发工作成为了媒体通稿发布的新形势。大舍传媒作为一家专注于宣传推广的公司&#xff0c;一直致力于与比利时博伊克邮报&#xff08;boicpost&#xff09;合作&#…...

摄影构图:人像摄影和风景摄影的一些建议

写在前面 博文内容涉及摄影中人像摄影和风景摄影的简单介绍《高品质摄影全流程解析》 读书笔记整理理解不足小伙伴帮忙指正 &#x1f603; 生活加油 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样…...

安卓实现输入快递单号生成二维码,摄像头扫描快递单号生成的二维码,可以得到快递信息

背景&#xff1a; 1、实现二维码的生成和识别2、实现andriod&#xff08;或虚拟机&#xff09;部署&#xff0c;调用摄像头3、实现网络管理&#xff0c;包括数据库【取消】2、3可以组队实现&#xff0c;1必须单人实现 过程&#xff1a; 安卓APP主界面 输入快递单号信息&#…...

Mysql特殊用法分享

不存在则插入&#xff0c;存在则更新的2种写法 前置使用条件&#xff0c;必须有唯一索引 -- 1 REPLACE INTO REPLACE INTO typora.ip_view_times_record (ip, view_times, url) VALUES(10.25.130.64, 1, https://10.25.168.80/fhh/index.html?urlindex.md543);-- 2 ON DUPLI…...

一个开源的快速准确地将 PDF 转换为 markdown工具

大家好&#xff0c;今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。 Marker是一款功能强大的PDF转换工具&#xff0c;它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文&#xff0c;支持所有语言的转换&#xff0c;并…...

可通过小球进行旋转的十字光标(vtkResliceCursor)

前一段事件看到VTK的一个例子&#xff1a; 该案例是vtk.js写的&#xff0c;觉得很有意思&#xff0c;个人正好也要用到&#xff0c;于是萌生了用C修改VTK源码来实现该功能的想法。原本以为很简单&#xff0c;只需要修改一下vtkResliceCursor就可以了&#xff0c;加上小球&#…...

python遍历文件夹并计算某类文件的数量,制图像文件到目标文件夹

python遍历文件夹并计算某类文件的数量&#xff0c;制图像文件到目标文件夹 在Python中&#xff0c;你可以使用os和os.path模块来遍历文件夹&#xff08;目录&#xff09;。下面是一个简单的示例&#xff0c;展示了如何遍历一个文件夹中的所有文件和子文件夹&#xff1a; imp…...

网络层只懂路由?这9个知识点被严重低估了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 网络层想必你已经耳熟能详&#xff0c;它的作用自然是不容小觑。 它负责将数据从源头准确地投递到目的地&am…...

最新的kali Linux源,解决apt update报错说没有数字签名

原因&#xff1a; 国内源的地址大部分都是http开头&#xff0c;这些地址早就无法使用。 解决方案&#xff1a; wget archive.kali.org/archive-key.asc //下载签名 apt-key add archive-key.asc //安装签名 另外&#xff0c;需…...

RAG与Langchain简介

RAG与Langchain简介 什么是RAGRAG解决的问题RAG工作流程RAG调优策略LangChain简介 什么是RAG 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09;&#xff0c;主要是通过从外部给大模型补充一些知识&#xff0c;相当于给模型外挂了一个知识库&#xff0c;让…...

绕过网页的阻止复制

绕过网页的阻止复制 一、问题的提出二、绕过技巧一三、绕过技巧二四、绕过技巧三五、总结说明 一、问题的提出 也是很久没有写文章了&#xff0c;今天突发奇想写一篇文章。首先你有没有被网页中的一些阻止你复制的页面所困扰。就是那种&#xff0c;你突然找到一篇文章&#xf…...

Jackson指定json的key

指定json的key ‍ ‍ 要在序列化JavaBean时指定JSON的key&#xff0c;可以使用JsonProperty​注解来指定JavaBean属性序列化到JSON时使用的key。以下是一个简单的示例&#xff1a; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.da…...

谷歌发布Infini-Transformer模型—无限注意力机制长度,超越极限

Transformer 是一种基于自注意力机制的深度学习模型&#xff0c;最初应用于自然语言处理领域&#xff0c;现已扩展到图像、音频等多个领域。与传统的循环神经网络 (RNN) 不同&#xff0c;Transformer 不依赖于顺序数据处理&#xff0c;能够并行计算&#xff0c;从而显著提高效率…...

激光点云配准算法——Cofinet / GeoTransforme / MAC

激光点云配准算法——Cofinet / GeoTransformer / MAC GeoTransformer MAC是当前最SOTA的点云匹配算法&#xff0c;在之前我用总结过视觉特征匹配的相关算法 视觉SLAM总结——SuperPoint / SuperGlue 本篇博客对Cofinet、GeoTransformer、MAC三篇论文进行简单总结 1. Cofine…...

socket--cs--nc简单实现反弹shell

socket_client.py import socket#客户端: #连接服务段的地址和端口 #输入命令发送执行 #回显命令执行结果# ipinput(please input connect ip:) # portinput(please input connect port:)ssocket.socket() # IP and PORT s.connect((,9999)) while True:cmdlineinput(please i…...

CSS入门基础2

目录 1.标签类型 2.块元素 3.行内元素 4.行内块元素 5.标签行内转换 6.背景样式 1.标签类型 标签以什么方式进行显示&#xff0c;比如div 自己占一行&#xff0c; 比如span 一行可以放很多个HTML标签一般分为块标签和行内标签两种类型&#xff1a; 块元素行内元素。 2.块…...

Mac vscode could not import github.com/gin-gonic/gin

问题背景&#xff1a; 第一次导入一个go的项目就报红 问题分析&#xff1a; 其实就是之前没有下载和导入gin这个web框架包 gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确。 问题解决&#xff1a; 依次输入以下命令。通…...

MySQL修改用户权限(宝塔)

在我们安装好的MySQL中&#xff0c;很可能对应某些操作时&#xff0c;不具备操作的权限&#xff0c;如下是解决这些问题的方法 我以宝塔创建数据库为例&#xff0c;创建完成后&#xff0c;以创建的用户名和密码登录 这里宝塔中容易发生问题的地方&#xff0c;登录不上去&#…...

论文阅读(一种新的稀疏PCA求解方式)Sparse PCA: A Geometric Approach

这是一篇来自JMLR的论文&#xff0c;论文主要关注稀疏主成分分析&#xff08;Sparse PCA&#xff09;的问题&#xff0c;提出了一种新颖的几何解法&#xff08;GeoSPCA&#xff09;。 该方法相比传统稀疏PCA的解法的优点&#xff1a;1&#xff09;更容易找到全局最优&#xff…...

Chrome/Edge浏览器视频画中画可拉动进度条插件

目录 前言 一、Separate Window 忽略插件安装&#xff0c;直接使用 注意事项 插件缺点 1 .无置顶功能 2.保留原网页&#xff0c;但会刷新原网页 3.窗口不够美观 二、弹幕画中画播放器 三、失败的尝试 三、Potplayer播放器 总结 前言 平时看一些视频的时候&#xff…...

住建厅报名考试入口/怎样进行seo推广

在Eclipse中写Python代码时&#xff0c;会发现注释颜色很浅&#xff0c;看起来比较费力。根据以下操作可以修改颜色&#xff0c;缓解眼球疲劳。 Window-->Preferences-->Pydev&#xff0c;选中Editor&#xff0c;右边的Appearance color options&#xff0c;选中Common&…...

张北网站建设公司/国内seo公司哪家最好

为什么80%的码农都做不了架构师&#xff1f;>>> jQuery插件PrintArea可实现打印页面某区域功能。 使用说明 需要使用jQuery库文件和PrintArea库文件 使用方法 一&#xff0c;包含文件部分 <script type"text/javascript" src"jquery.js&quo…...

b2b开发/南昌seo技术外包

Id sunRainAmazing hibernate 注解 Id无对应的属性指定实体的主键。Id应用注释的字段或属性应为以下类型之一&#xff1a;任何Java基元类型; 任何原始的包装类型; String;java.util.Date; java.sql.Date; java.math.BigDecimal;java.math.BigInteger。实体主键的映射列被认为是…...

网站怎么做下载内容/seo搜索引擎优化平台

周四见 公开课系列We,知数堂习惯用实力介绍自己—我们只分享干货重磅福利来袭2018年5月24日&#xff0c;20:30-21:30 周四见不见不散&#xff01;主讲嘉宾&#xff1a;叶金荣 知数堂联合创始人 & 3306π社区负责人 资深MySQL专家&#xff0c;Oracle M…...

营口网站建设哪家好/搜易网提供的技术服务

本实用新型属于计算机技术领域&#xff0c;具体涉及一种计算机组装系统用主板连接架。背景技术&#xff1a;电脑机箱主板&#xff0c;又叫主机板(mainboard)、系统板(systemboard)或母板(motherboard)&#xff1b;它分为商用主板和工业主板两种&#xff0c;它安装在机箱内&…...

c 手机版网站开发/网络培训总结

1. 问题描述&#xff1a; 有 N 种物品和一个容量是 V 的背包&#xff0c;每种物品都有无限件可用。第 i 种物品的体积是 vi&#xff0c;价值是 wi。求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。输出最大价值。 输入格式…...