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

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

  • 内部状态是对象可共享的部分,通常是对象的数据部分。
  • 外部状态是对象不可共享的部分,通常是对象的上下文。
    flyweight 可以同时存在多个场景使用,并且每个场景中flyweight都可以作为一个独立的对象(区分singleton单例:保证一个类只有一个实例,并提供一个访问他的全局节点)
    在Python中,你可以使用字典来实现享元模式,字典的键是内部状态,值是对应的对象。以下是一个简单的享元模式的实现:
python 复制代码
class Flyweight:
    _flyweights = {}

    def __init__(self, state):
        self._intrinsic_state = state

    @classmethod
    def 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字典中。

相关推荐
多弗朗皮卡丘4 小时前
C++特殊类设计
开发语言·c++·设计模式
Carl_奕然5 小时前
【智能体】Loop 的四种设计模式之:Verification Loop(2026 最新版)
人工智能·python·设计模式
是2的10次方啊5 小时前
设计模式与生活③:你的早晨,是一套模板
设计模式
.Hypocritical.1 天前
JUC + 三大设计模式(单例、工厂、代理)
设计模式·juc·1024程序员节
是2的10次方啊1 天前
设计模式与生活②:你只管点外卖,别管堡怎么做
设计模式
是2的10次方啊2 天前
设计模式与生活①:你的脸,为什么不能有第二个?
设计模式
高晶2 天前
ARM 嵌入式 Linux 命令系统 BusyBox 实战指南
linux·设计模式·程序员
高晶2 天前
语音合成与变声技术十大业务场景落地实战:从电商直播到规模化生产
设计模式·程序员
博风2 天前
19、设计模式应用举例:桥接模式:制作电视节目
设计模式·桥接模式
知守观2 天前
从 4 套 PDF 库的混战,聊聊老项目的依赖管理与“静默失败”
java·后端·设计模式