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

news2025/1/8 16:01:41

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

  • 内部状态是对象可共享的部分,通常是对象的数据部分。
  • 外部状态是对象不可共享的部分,通常是对象的上下文。
    flyweight 可以同时存在多个场景使用,并且每个场景中flyweight都可以作为一个独立的对象(区分singleton单例:保证一个类只有一个实例,并提供一个访问他的全局节点)
    在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字典中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北京WordPress建站公司

北京wordpress建站,就找北京wordpress建站公司 http://wordpress.zhanyes.com/beijing

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章:探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章:深入理解HDFS工作原理:大数据存储和容错性机制解析 ** 在当今数字化时代,大数据处理已经成为了企业成功的重要组成部分。而在大数据处…

C#学习笔记 面试提要

冒泡 for (int m 0; m < arr.Length; m) { for (int n 0; n < arr.Length - 1 - m; n) { if (arr[n] > arr[n1]) { int temp arr[n]; arr[n] arr[n 1]; arr[n1] temp; } } } 选择 for (int m 0; m < arr.Length; m) { int index 0; for (int n 1; n < …

每日面经分享(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件&#xff0c;编写以下测试脚本 import pytest import requests# 测试用例1&#xff1a;验证登录成功的情况 # 第一个测试用例验证登录成功的情况&#xff0c;发送有效的用户名和密…

【实例分割】用自己的数据复现yolact网络-含python源码

yolact不算是很新的实例分割方法&#xff0c;但好在易上手&#xff0c;且像YOLO系列一样&#xff0c;在持续更新中&#xff0c; 所以作为示例分割的开篇&#xff0c;就以yolact作为第一篇开始学习吧! 目录 &#x1f438;&#x1f438;1.YOLACT是什么&#xff1f; &#x1f64…

MegaSeg Pro for Mac v6.3.1 注册激活版 音视频DJ混音工具

MegaSeg Pro for Mac是一款专业的DJ和广播自动化软件&#xff0c;旨在为音乐专业人士提供强大的音乐播放和演播功能。这款软件具有多种功能&#xff0c;包括强大的音乐库管理&#xff0c;支持导入和组织大量音乐文件&#xff0c;可以轻松管理你的音乐收藏。它支持广泛的音频格式…

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站&#xff0c;这可太多了。 我之前学习SQL买了本SQL学习指南&#xff0c;把语法从头到尾看了个遍&#xff0c;但仅仅是心里有数的程度&#xff0c;后来进公司大量的写代码跑数&#xff0c;才算真真摸透了SQL&#xff0c;知道怎么调优才能最大化…

工艺品wordpress外贸主题

工艺品wordpress外贸主题 简约大气的wordpress外贸主题&#xff0c;适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377

【JavaWeb】Day25.Web入门——HTTP协议(一)

HTTP协议——概述 1.介绍 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议http协议要求&#xff1a;浏览器在向服务器发送请求数据时&#xff0c;或是服务器在…

《深入Linux内核架构》第3章 内存管理(6)

目录 3.5.7 内核中不连续页的分配 3.5.8 内核映射 本节讲解vmalloc, vmap&#xff0c;kmap原理。 3.5.7 内核中不连续页的分配 kmalloc函数&#xff1a;分配物理地址和虚拟地址都连续的内存。 kmalloc基于slab&#xff0c;而slab基于伙伴系统。 void *vmalloc(unsigned lon…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

WPF学习笔记-FlowDocument流文档基础知识和基本操作

文章目录 概述一、块元素和内联元素1.1 块元素&#xff08;Block类&#xff09;1.2 内联元素&#xff08;Inline类&#xff09;二、Paragraph元素2.1 基本属性设置2.2 将内联元素Inline添加到Inlines中2.3 设置中西文字体不一样 三、Table元素3.1 添加新的Table3.2 添加列3.3 添…

深入了解C语言中的结构体类型与内存对齐

引言&#xff1a; 在C语言中&#xff0c;结构体是一种自定义的数据类型&#xff0c;它允许我们将不同类型的数据组合在一起&#xff0c;形成一个新的数据类型。结构体的使用为我们解决了一些复杂数据的表示和处理问题&#xff0c;不仅限于单单的整型或者字符。本文将深入探讨结…

C++ vector 动态 向量/数组

文章目录 【 1. vector 的声明与初始化 】1.1 vector 的声明1.2 vector 的初始化1.2.1 构造一个空的 vector1.2.2 指定数量初值的方式初始化 vector1.2.3 迭代器的方式初始化1.2.4 构造一个相同的 vector 【 2. vector 的相关操作 】2.1 插入元素2.1.1 在vector的末尾插入新元素…

【ESP32 ECO V3】使用 Flash 下载工具完成 Secure Boot V2 功能

ESP32 ECO3 及以上版本 的芯片支持 Secure Boot V1 和 Secure Boot V2。使用 ESP32 ECO3 版本的芯片推荐使用 Secure Boot V2, 此篇文档记录基于 ESP32 ECO3 芯片通过 Flash 下载工具开启 Secure Boot V2 的实现。 支持 Secure Boot V2 的产品如下&#xff1a; 芯片型号Secur…

号称史上最全的PostgreSQL备份恢复,送给有缘人...

&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; 中国DBA联盟(ACD…

【Linux】ubuntu安装google gtest框架

本文首发于 ❄️慕雪的寒舍 ubuntu 22.04.03 LTS 安装 google gtest 框架 1.依赖项 首先在ubuntu中安装如下包 sudo apt install -y unzip g gcc cmake make automake2.下载软件包 进入google gtest的github页面&#xff0c;下载源码包 Releases google/googletest https…

使用 PDManer 对数据库表建模(建表语句生成,代码生成)

目录 前言 基本使用教程 新建项目 创建表 关系图 建表语句 生成代码 导入 前言 在软件开发中过程中&#xff0c;一般分为几个过程&#xff1a;需求分析、概要设计、详细设计、编码实现、软件测试和软件交付。 在概要设计和详细设计过程中&#xff0c;则需要对业务进…

Java学习11

目录 一.类变量和类方法&#xff1a; 1.类变量定义访问&#xff1a; 2.类变量的使用细节&#xff1a; 3.类方法&#xff1a; 4.静态main方法&#xff08;public static void main(String [] args)&#xff09;&#xff1a; 二.代码块&#xff1a; 1.基本语法&#xff1a;…