当前位置: 首页 > 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();}
}

适用性

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

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

相关文章:

  • 缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析
  • ArrayList与顺序表详解
  • C# 综合示例 库存管理系统4 classMod类
  • 力扣面试150题--基本计算器
  • 移动零--LeetCode
  • 切割PDF使用python,库PyPDF2
  • 区块链技术:深入共识算法、智能合约与DApps的架构奥秘
  • 【GIT】github中的仓库如何删除?
  • Langchain+RAG+向量数据库
  • vue-study(1)
  • java面向对象编程【基础篇】之基础语法
  • Day11(回溯法)——LeetCode79.单词搜索
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(10): つもり 计划/打算
  • Jenkins:开启高效软件开发的魔法之门
  • Java面试:从Spring Boot到微服务的全面考核
  • 【Leetcode 每日一题】2799. 统计完全子数组的数目
  • Nginx 中间件
  • 【一次成功!】Ubuntu22.04 安装 Autoware、 cuda、 cudnn、 TensorRT
  • PostgreSQL 分区表——范围分区SQL实践
  • Web3.0的认知补充(去中心化)
  • 朱守科任西藏自治区政府副主席、公安厅厅长
  • 财政部部长:中方主张通过平等对话协商解决贸易和关税争议
  • 神舟二十号载人飞船发射升空
  • 云南洱源县4.8级地震:房屋受损442户,无人员伤亡报告
  • 更好发挥汽车产业在扩投资促消费方面的带动作用!陈吉宁调研上海车展
  • 洛阳白马寺的墓主人是狄仁杰?其实这个误解从北宋就开始了