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

#设计模式#4.6 Flyweight(享元) 对象结构型模式

享元模式是一种结构型设计模式,其主要目标是通过共享大量细粒度的对象来节省内存。享元模式的关键在于区分内部状态(Intrinsic State)和外部状态(Extrinsic State)。

  • 内部状态是对象可共享的部分,通常是对象的数据部分。
  • 外部状态是对象不可共享的部分,通常是对象的上下文。
    flyweight 可以同时存在多个场景使用,并且每个场景中flyweight都可以作为一个独立的对象(区分singleton单例:保证一个类只有一个实例,并提供一个访问他的全局节点)
    在Python中,你可以使用字典来实现享元模式,字典的键是内部状态,值是对应的对象。以下是一个简单的享元模式的实现:
class Flyweight:_flyweights = {}def __init__(self, state):self._intrinsic_state = state@classmethoddef get_flyweight(cls, state):if state not in cls._flyweights:cls._flyweights[state] = Flyweight(state)return cls._flyweights[state]def operation(self, extrinsic_state):print(f"Intrinsic State = {self._intrinsic_state}, Extrinsic State = {extrinsic_state}")

在这个例子中,Flyweight类有一个类变量_flyweights,它是一个字典,用于存储享元。get_flyweight方法用于获取一个享元,如果享元不存在,那么它会创建一个新的享元并存储在_flyweights字典中。

相关文章:

  • Spring IOC控制反转、DI注入以及配置
  • 解决nginx代理后,前端拿不到后端自定义的header
  • STM32重要参考资料
  • 企业案例:金蝶云星空集成钉钉,帆软BI
  • 【bugfix】如何解决svg到线上显示空白或者svg的viewBox为空
  • 【群晖】白群晖如何公网访问
  • 试过了,ChatGPT确实不用注册就可以使用了!
  • 3. WiFi基本原理
  • js 中toLocaleString的用法
  • 设计模式之旅:工厂模式全方位解析
  • 【MySQL】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
  • QT子窗口关闭时自动释放及注意事项
  • VSCode好用插件
  • 手写简易操作系统(十一)--可编程中断控制器8259A
  • Vue-Electron配置及踩坑
  • [译]CSS 居中(Center)方法大合集
  • 【EOS】Cleos基础
  • 2018一半小结一波
  • Angular 4.x 动态创建组件
  • angular2 简述
  • canvas 高仿 Apple Watch 表盘
  • IP路由与转发
  • Java读取Properties文件的六种方法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • PaddlePaddle-GitHub的正确打开姿势
  • 安装python包到指定虚拟环境
  • 对象管理器(defineProperty)学习笔记
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用 QuickBI 搭建酷炫可视化分析
  • 温故知新之javascript面向对象
  • Nginx实现动静分离
  • 选择阿里云数据库HBase版十大理由
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # 飞书APP集成平台-数字化落地
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (39)STM32——FLASH闪存
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (分布式缓存)Redis持久化
  • (接口封装)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)Dubbo快速入门、介绍、使用
  • (译)2019年前端性能优化清单 — 下篇
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .Net各种迷惑命名解释
  • .NET关于 跳过SSL中遇到的问题
  • .Net中wcf服务生成及调用
  • .net中我喜欢的两种验证码
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • .sh 的运行
  • @Mapper作用
  • [ 数据结构 - C++] AVL树原理及实现
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [Google Guava] 2.1-不可变集合