news 2026/3/27 2:34:25

Python设计模式:享元模式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python设计模式:享元模式详解

享元模式的核心思想

享元模式(Flyweight Pattern)通过共享对象减少内存占用,适用于存在大量重复对象的场景。其核心是将对象的内在状态(可共享)与外在状态(不可共享)分离,通过共享内在状态优化资源。

享元模式的结构

  • Flyweight(抽象享元类):定义共享对象的接口。
  • ConcreteFlyweight(具体享元类):实现抽象享元类,存储内在状态。
  • FlyweightFactory(享元工厂类):管理享元对象池,确保对象被合理共享。
  • Client(客户端):维护外在状态,调用享元对象。

实现步骤

定义抽象享元接口

from abc import ABC, abstractmethod class Flyweight(ABC): @abstractmethod def operation(self, extrinsic_state): pass

实现具体享元类

class ConcreteFlyweight(Flyweight): def __init__(self, intrinsic_state): self._intrinsic_state = intrinsic_state # 内在状态(共享部分) def operation(self, extrinsic_state): print(f"Shared: {self._intrinsic_state}, Unique: {extrinsic_state}")

享元工厂管理共享

class FlyweightFactory: _flyweights = {} # 享元对象池 @classmethod def get_flyweight(cls, key): if key not in cls._flyweights: cls._flyweights[key] = ConcreteFlyweight(key) return cls._flyweights[key]

客户端使用示例

factory = FlyweightFactory() flyweight_a = factory.get_flyweight("A") # 首次创建并缓存 flyweight_b = factory.get_flyweight("A") # 直接复用 flyweight_a.operation("state1") # 输出: Shared: A, Unique: state1 flyweight_b.operation("state2") # 输出: Shared: A, Unique: state2

应用场景

  • 文本编辑器:字符对象共享(如字母“A”只需一个实例)。
  • 游戏开发:大量相同粒子效果(如子弹、树木)。
  • 数据库连接池:复用连接对象减少开销。

https://www.zhihu.com/zvideo/1992404649416885618/
https://www.zhihu.com/zvideo/1992404649920189696/
https://www.zhihu.com/zvideo/1992404646791230854/
https://www.zhihu.com/zvideo/1992404644815717039/
https://www.zhihu.com/zvideo/1992404644379509727/
https://www.zhihu.com/zvideo/1992404644689904603/
https://www.zhihu.com/zvideo/1992404642911524051/
https://www.zhihu.com/zvideo/1992404641779045977/
https://www.zhihu.com/zvideo/1992404634623574368/
https://www.zhihu.com/zvideo/1992404634430628805/
https://www.zhihu.com/zvideo/1992404632442521330/
https://www.zhihu.com/zvideo/1992404630768985959/
https://www.zhihu.com/zvideo/1992404630718677966/
https://www.zhihu.com/zvideo/1992404629833655108/
https://www.zhihu.com/zvideo/1992404629024166713/
https://www.zhihu.com/zvideo/1992404622791423661/
https://www.zhihu.com/zvideo/1992404628856411164/
https://www.zhihu.com/zvideo/1992404627975591820/
https://www.zhihu.com/zvideo/1992404626985730132/
https://www.zhihu.com/zvideo/1992404626289493675/
https://www.zhihu.com/zvideo/1992404621709291853/
https://www.zhihu.com/zvideo/1992404621038217121/
https://www.zhihu.com/zvideo/1992404618005733708/
https://www.zhihu.com/zvideo/1992404614432170789/
https://www.zhihu.com/zvideo/1992404615543690944/
https://www.zhihu.com/zvideo/1992404614176321614/
https://www.zhihu.com/zvideo/1992404609315132028/
https://www.zhihu.com/zvideo/1992404589270550149/
https://www.zhihu.com/zvideo/1992404587995496693/
https://www.zhihu.com/zvideo/1992404585013326088/
https://www.zhihu.com/zvideo/1992404583436268816/
https://www.zhihu.com/zvideo/1992404582639372230/
https://www.zhihu.com/zvideo/1992404581980865776/
https://www.zhihu.com/zvideo/1992404580936484701/
https://www.zhihu.com/zvideo/1992404580231844821/
https://www.zhihu.com/zvideo/1992404576171741283/
https://www.zhihu.com/zvideo/1992404574590506269/
https://www.zhihu.com/zvideo/1992404575051858971/
https://www.zhihu.com/zvideo/1992404575232213305/
https://www.zhihu.com/zvideo/1992404574632424027/
https://www.zhihu.com/zvideo/1992404574498215281/
https://www.zhihu.com/zvideo/1992404567258854271/
https://www.zhihu.com/zvideo/1992404571532836993/
https://www.zhihu.com/zvideo/1992404571440562947/
https://www.zhihu.com/zvideo/1992404571021123672/
https://www.zhihu.com/zvideo/1992404557834245543/
https://www.zhihu.com/zvideo/1992404559025443249/
https://www.zhihu.com/zvideo/1992404556550797057/
https://www.zhihu.com/zvideo/1992404547432370347/

优缺点分析

优点

  • 显著减少内存消耗,提升性能。
  • 通过集中管理享元对象,降低系统复杂度。

缺点

  • 需要分离内在/外在状态,增加设计难度。
  • 过度共享可能导致线程安全问题。

与其他模式对比

  • 单例模式:享元关注对象共享,单例强制全局唯一实例。
  • 对象池模式:享元强调状态分离,对象池侧重生命周期管理。

通过合理使用享元模式,可高效处理大量细粒度对象的共享问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 2:50:49

Hive与Doris整合:MPP引擎加速大数据分析

Hive与Doris整合:MPP引擎加速大数据分析关键词:Hive, Doris, MPP, 大数据分析, 数据整合, 向量化执行, 实时查询加速摘要:本文深入探讨Apache Hive与Apache Doris的整合技术,解析如何通过MPP(大规模并行处理&#xff0…

作者头像 李华
网站建设 2026/3/23 21:15:54

深入探讨Blazor组件的布局与实践

在现代Web开发中,Blazor作为一种新的Web框架,结合了服务端渲染和WebAssembly的优势,提供了强大的前端开发体验。今天我们来讨论一个常见但重要的主题:Blazor组件的布局问题。特别是,当涉及到可路由和不可路由的组件时,我们应该如何决定它们的放置位置? 什么是Blazor组件…

作者头像 李华
网站建设 2026/3/19 3:43:38

人大金仓数据库

v8版本说明 人大金仓数据库V8(KingbaseES V8)是基于PostgreSQL 9.6版本开发的。‌ 1该版本在设计上继承了PostgreSQL 9.6的特性,同时增加了对Oracle的兼容性支持。 pg9.5以上版本 pg9.5以上版本-PgSQL实现更新或插入(单条数据&…

作者头像 李华
网站建设 2026/3/15 2:30:19

前后端分离教师工作量管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着教育信息化的快速发展,高校教师工作量管理逐渐从传统的手工记录向数字化、智能化转型。传统管理方式存在效率低下、数据易丢失、统计不准确等问题,难以满足现代高校对教师工作量精细化管理的需求。教师工作量管理系统通过信息化手段实现工作量计…

作者头像 李华
网站建设 2026/3/21 6:43:39

自定义封装tabs,超出显示上下翻页按钮

效果展示&#xff1a;未超出&#xff1a;超出&#xff1a;代码&#xff1a;<template><div class"custom-tabs"><!-- 左侧翻页按钮 --><div class"scroll-btn left-btn" :class"{ disabled: !canScrollLeft }" click"…

作者头像 李华