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

JAVA设计模式——(五)享元模式(Flyweight Pattern)

JAVA设计模式——(五)享元模式(Flyweight Pattern)

  • 概念
  • 理解
  • 实现
    • 创建内部状态
    • 定义享元工厂
    • 测试
  • 适用性

概念

使共享对象可以有效的支持大量的细粒度对象。主要采用池技术实现。

理解

享元模式主要解决大量对象的共享,实现内部对象的状态一致性,和外部状态对内部状态的使用。简单理解就是,在JAVA的基础数据类型中,String、Integer、Character等类型均会在创建时缓存一定范围的数据,较少创建和销毁对象花费的时间。

所以,该模式主要涉及以下部分:内部状态、外部状态、外部状态转换为内部状态的工厂、利用外部状态的客户端。

实现

创建内部状态

定义团队抽象类:

package cn.sh.designepattern;/** 定义团队抽象类* @Author song* @Version 0.0.1* @Date 2025/4/24 14:23* @Contact 643947568@qq.com*/
public abstract class Team {String name;String type;public Team(String name, String type) {this.name = name;this.type = type;}public abstract void attendCompetition();
}

定义内部状态具体实现:

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 14:26* @Contact 643947568@qq.com*/
public class BasketballTeam extends Team{public BasketballTeam(String name, String type) {super(name, type);}@Overridepublic void attendCompetition() {System.out.println("篮球队参赛");}
}
package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 14:26* @Contact 643947568@qq.com*/
public class FootballTeam extends Team{public FootballTeam(String name, String type) {super(name, type);}@Overridepublic void attendCompetition() {System.out.println("足球队参数");}
}

定义享元工厂

package cn.sh.designepattern;import java.util.HashMap;
import java.util.Map;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 14:29* @Contact 643947568@qq.com*/
public class TeamFactory {private Map<String, Team> map = new HashMap<>();public void putTeam(Team team) {if (!map.containsKey(team.name)) {map.put(team.name, team);}}public Team getTeam(String name) {return map.get(name);}}

测试

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/24 10:47* @Contact 643947568@qq.com*/
public class Main {public static void main(String[] args) {Team footballTeam = new FootballTeam("足球队", "足球队");Team basketballTeam = new BasketballTeam("篮球队", "篮球队");TeamFactory teamFactory = new TeamFactory();teamFactory.putTeam(footballTeam);teamFactory.putTeam(basketballTeam);teamFactory.getTeam("足球队").attendCompetition();teamFactory.getTeam("篮球队").attendCompetition();}
}

适用性

享元模式可以通过缓存常用的对象在内存中,以节省对象的创建和销毁的时间,从而提高系统的加载速度。

不过缓存太多的对象会导致内存的大量占用,还需要视实际情况而定。

http://www.xdnf.cn/news/112843.html

相关文章:

  • 快速配置linux远程开发-go语言
  • Web3中心化交易所钱包-批量地址生成业务
  • 测试基础笔记第十一天
  • 第十四届蓝桥杯省B.砍树
  • 如何创建极狐GitLab 议题?
  • 膳食营养诊断活动:科技赋能,共筑全民健康新基石
  • Langchain+RAG+向量数据库
  • GitHub万星项目维护者分享:开源协作的避坑指南
  • C++ 日志系统实战第二步:不定参数函数解析
  • 深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用
  • 手撕C++STL list:深入理解双向链表的实现
  • 解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案
  • 【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
  • 【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置
  • 精益数据分析(20/126):解析经典数据分析框架,助力创业增长
  • day36图像处理OpenCV
  • Windows IIS 配置编辑器 应用程序初始化 <applicationInitialization>
  • 开发并发布一个属于自己的包(npm)
  • 算法笔记.spfa算法(bellman-ford算法的改进)
  • 要从给定的数据结构中提取所有的 itemList 并将其放入一个新的数组中
  • Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
  • mfc学习(一)
  • 基于whisper和ffmpeg语音转文本小程序
  • 【深度学习】#9 现代循环神经网络
  • 【C++】继承
  • 数据结构与算法实战:从理论到落地的深度探索
  • 原生微信小程序,canvas生成凭证,保存到手机
  • Java的进阶学习
  • 鲲鹏麒麟搭建Docker仓库
  • 海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成