设计模式 -- 享元模式

news2024/11/16 23:39:36

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是享元模式?

        享元模式是一种结构型设计模式,其主要目的是通过共享尽可能多的对象来最小化内存使用和提高性能。它通过将对象分为可共享和不可共享两类来实现这一目标。可共享对象可以在多个上下文中重复使用,而不可共享对象则必须在每个上下文中创建新实例。

二、享元模式的优缺点:

优点:

  1. 减少对象的数量,节省内存空间和系统资源。

  2. 提高程序性能,因为减少了对象的创建和销毁次数。

  3. 可以共享对象状态,增加程序的灵活性和可维护性。

  4. 可以通过享元工厂来统一管理对象,方便管理和维护。

缺点:

  1. 对象共享可能导致线程安全问题,需要进行同步处理。
  2. 对象共享可能会导致代码复杂度增加,需要额外的代码来维护共享池。
  3. 对象共享可能会影响程序的可读性和可维护性,因为对象的状态被分散到了不同的地方。

三、享元模式的结构:

 

四、享元模式实战:

1.创建FlyWeight

 2.创建具体FlyWeight

3.创建FlyWeightFactory

 

 4.测试:

 5.结果:

五.总结:

Java中享元模式的应用场景:

  1. 字符串常量池:在Java中,字符串常量池就是一种享元模式的应用场景。在字符串常量池中,相同的字符串只会被保存一次,多个字符串可以共享同一个对象。

  2. 数据库连接池:在Java中,数据库连接池也是一种享元模式的应用场景。连接池中的连接对象可以被多个线程共享,避免了频繁创建和销毁连接对象的开销。

  3. 图形界面中的图形元素:在图形界面中,图形元素(如按钮、文本框等)可以被多个窗口共享,避免了重复创建相同的元素。

  4. 享元模式还可以用于优化大量相似对象的创建和销毁过程,例如游戏中的粒子系统。

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

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

相关文章

以CSDN为例,用Charles抓浏览器接口

0 描述 很多网站,都禁止F12,这就给抓包设置了门槛,虽然解决的方法有很多,今天尝试使用工具试一试,以CSDN热榜为例,直接转python代码 1 工具下载 工欲善其事,必先利其器 这个我就不多说&#x…

MySql -- 为什么使用B+树做索引

再有人问你为什么MySQL用B树做索引,就把这篇文章发给她 本文是参考上述文章进行总结和补充,大家感兴趣也可以阅读原文. 目录 1. 索引 2. 二叉搜索树 3. 平衡二叉树 4. B树 5. B树 6.扩展 -- 聚集索引 VS 非聚集索引 1. 索引 概念:索引是一种特殊的文件&#xff…

工业4.0,无代码改变软件开发格局,数字化转型不再寸步难行

从工业1.0时代到工业4.0时代,我们已经看到了,中国在不断发展的过程中,面临着很多的挑战,企业也面临着很多的困难。在这样的大背景下,传统的开发方式已经不再适用了。很多企业开始寻求一种新的方式来开发软件&#xff0…

【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

1688阿里巴巴中国站图片识别商品API接口、搜图链接、收藏加购接口

API(Application Programming Interface) 是现代移动应用程序开发和互联网服务有机结合的产物。API的应用使得应用程序之间的通信变得更加轻松、快捷,尤其对于业务复杂而庞大的企业系统,API让开发者能够从中提取必要的功能进行二次…

图表控件Stimulsoft 2023.2 带来极致深色主题, 一起来看看还有哪些亮点?

Stimulsoft Reports 是一款报告编写器,主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署,如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等,在你的应用程序中嵌入报告设计器…

IS215UCVEH2AB有助于在更远距离传输电力的同时实现更好的转换效率。

​ IS215UCVEH2AB有助于在更远距离传输电力的同时实现更好的转换效率。 根据法拉第电磁感应定律,当交变磁场作用于具有磁性的材料时,材料中会感应出电动势。 由于导电材料的磁性,EMF 的电流围绕磁性材料主体旋转。这种旋转电流称为涡流。当导…

相交链表问题

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…

java版spring cloud 企业电子招投标采购系统源码之首页设计

随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要…

通过MyBatis(下)

作者:~小明学编程 文章专栏:spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 对MyBatis进行单元测试 springboot的单元测试 生成单元测试类 MyBatis中的增删查改 增 删 查 改 ${} 和 #{} 的区别 SQL注入 模糊查询…

低版本CUDA安装/多版本切换/用户级CUDA安装

前言:我想要安装Torch V1.7.1,根据版本信息只有cuda10.2和11.0。但是,本地安装的CUDA版本为11.6和11.2,都不能满足需求。因此需要降低CUDA版本为10.2 本机系统信息 CUDA版本和显卡驱动 nvidia-smi目前CUDA版本为11.6&#xff0c…

7万字省级智慧农业大数据平台项目规划建设方案

1.1 系统总体结构和逻辑结构 XX市智慧农业项目数据中心是全省数据处理加工和数据分析应用的中心,总体上需实现上连省农业厅、下连各级农业、外连市级部门;构建资源整合、互联互通、资源共享的全省统一的数据中心资源库;构建完善的底层支撑平…

Excel常用快捷键,你也可以成为大家口中的大神

掌握复制、粘贴,相信每个职场人都能骄傲地说“自己熟练使用Excel”,果真如此不害臊吗?不出10秒钟,肯定被面试官问得哑口无言。快捷键太多,记住几个常用的,收藏起来,需要的时候过来查看。 “学E…

软考高级架构师-1计算机硬件

目录 1. 前言 & 更新2. CPU组成3.存储器4. 总线1. 前言 & 更新 计算机硬件章节19-21年没考过,在22年真题考过磁盘调度,根据趋势分析,以后考的概率也不大,了解即可。 本节删掉了第一版中的编码、海明码等内容。 2. CPU组成 计算机的基本硬件系统由控制器、运算器…

日常节省 30%计算资源:阿里云实时计算 Flink 自动调优实践

摘要:本文整理自阿里云开发工程师,Apache Flink Contributor 钟旭阳,在 Flink Forward Asia 2022 生产实践的分享。本篇内容主要分为四个部分: 1. 历史背景 2. 框架简介 3. 案例介绍 4. 未来规划 Tips:点击「阅读原文」…

粘包/拆包问题一直都存在,只是到TCP就拆不动了。

• OSI open-system-Interconnection• TCP/IP 5层协议栈 • 应用层和操作系统的边界是 系统调用 ,对应到网络编程是socket api• TCP/UDP 概况• TCP粘包问题• 结合TCP/IP报头再回顾,柳暗花明 OSI开放系统互联 定义了网络框架,以层为单位实…

【VSLAM】ORB-SLAM3安装部署与运行

心口如一,犹不失为光明磊落丈夫之行也。——梁启超 文章目录 :smirk:1. ORB-SLAM3介绍:blush:2. 代码安装部署1. 安装ros与opencv2. 安装Pangolin作为可视化和用户界面3. 安装Eigen3一个开源线性库,可进行矩阵运算4. 安装ORB-SLAM3 :satisfied:3. 案例运…

OpenHarmony开发者大会正式召开 百业齐鸣开源共兴​

4月19日,OpenHarmony 开发者大会于北京正式召开。此次会议以“开源正当时,共赢新未来”为主题,邀请了各行各业众多开发者与会,盛况非凡。据了解,此次大会由开放原子开源基金会指导,OpenHarmony 项目群工作委…

依赖引入手册Idea常用设置常用工具手册

目录 数据库相关web应用工具相关postmancanal 测试相关插件相关Idea相关 数据库相关 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!--连接池-->…

进程控制(上)

目录 &#xff1a; 1.fork&#xff08;&#xff09;写实拷贝 -- 缺页中断 2.进程终止 1.退出码 2.exit&#xff08;进程终止&#xff09;、_exit() 3.进程等待 1.进程等待的必要性 2.进程如何进入等待 -----------------------------------------------------------------…