当前位置: 首页 > 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配置及踩坑
  • canvas 高仿 Apple Watch 表盘
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • laravel5.5 视图共享数据
  • Linux gpio口使用方法
  • mysql常用命令汇总
  • node和express搭建代理服务器(源码)
  • PHP那些事儿
  • vuex 笔记整理
  • XForms - 更强大的Form
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 翻译--Thinking in React
  • 前端js -- this指向总结。
  • 一个项目push到多个远程Git仓库
  • 智能网联汽车信息安全
  • 你对linux中grep命令知道多少?
  • 【云吞铺子】性能抖动剖析(二)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Java总结 - String - 这篇请使劲喷我
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云API、SDK和CLI应用实践方案
  • (+4)2.2UML建模图
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2)(2.10) LTM telemetry
  • (2)MFC+openGL单文档框架glFrame
  • (rabbitmq的高级特性)消息可靠性
  • (WSI分类)WSI分类文献小综述 2024
  • (二)WCF的Binding模型
  • (分布式缓存)Redis持久化
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (算法)Travel Information Center
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)EOS中账户、钱包和密钥的关系
  • ***利用Ms05002溢出找“肉鸡
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)