C#编程模式之享元模式

        创作背景:各位朋友,我们继续学习C#的编程模式,本文主要介绍享元模式。享元模式是一种结构型设计模式,它主要用于减少创建对象的数量,从而提高程序性能。它通过共享对象的方式来减少内存的使用,特别是系统中有大量相似对象的时候,这种模式尤其有效。

        享元模式的主要组成部分如下:

        1、享元对象:享元对象就是被共享的对象,包含很多内部状态,这些状态通常是不变的。

        2、享元工厂:负责创建和管理享元对象。

        3、非共享状态:每个享元对象的共享状态是特定的,不会被共享。

        示例代码如下:

        1、创建享元接口。

    /// <summary>/// 享元对象接口/// </summary>public abstract class Flyweight{/// <summary>/// 相关操作/// </summary>/// <param name="strName">名称</param>public abstract string Operation(string strName);}

        2、实现共享享元对象。

    /// <summary>/// 实际的享元类(共享状态)/// </summary>public class ActualFlyweight : Flyweight{/// <summary>/// 相关操作/// </summary>/// <param name="strName"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public override string Operation(string strName){return "创建了ActualFlyweight,名称为:" + strName;}}

        3、创建非共享享元对象。

    /// <summary>/// 实际的享元类(非共享)/// </summary>public class UnsharedActualFlyweight : Flyweight{/// <summary>/// 相关操作/// </summary>/// <param name="strName"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public override string Operation(string strName){return "创建了UnsharedActualFlyweight,名称为:" + strName;}}

        4、创建享元工厂。

    /// <summary>/// 享元工厂/// </summary>public class FlyweightFactory{private Hashtable flyweights = new Hashtable();/// <summary>/// 构造函数/// </summary>public FlyweightFactory(){flyweights.Add("One", new ActualFlyweight());flyweights.Add("Two", new ActualFlyweight());flyweights.Add("Three", new ActualFlyweight());}/// <summary>/// 获取Hashtable中的一个享元/// </summary>/// <param name="key"></param>/// <returns></returns>public Flyweight GetFlyweight(string key){return ((Flyweight)flyweights[key]);}}

        5、客户端调用。

        /// <summary>/// 享元模式/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_flyweight_Click(object sender, EventArgs e){FlyweightFactory factory = new FlyweightFactory();Flyweight fx = factory.GetFlyweight("One");tbox_flyweight.Text = fx.Operation("One");Flyweight fy = factory.GetFlyweight("Two");tbox_flyweight.Text += "\r\n" + fy.Operation("Two");Flyweight fz = factory.GetFlyweight("Three");tbox_flyweight.Text += "\r\n" + fz.Operation("Three");UnsharedActualFlyweight fu = new UnsharedActualFlyweight();tbox_flyweight.Text += "\r\n" + fu.Operation("Four");}

        6、运行结果图片。

         以上就是全部享元模式的一个简单示例程序,希望对各位小伙伴能有个帮助。

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

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

相关文章

9.spring-图书管理系统

文章目录 1.开发项目流程1.1开发开发1.2数据库的设计 2.MySQL数据库相关代码3.构造图书结构3.1用户登录3.2图书列表3.3图书添加3.4图书删除3.4.1批量删除 3.5图书查询(翻页) 4.页面展示4.1登录页面4.2列表页面4.3增加图书页面4.4修改图书信息页面 5.功能展示5.1增加图书信息5.2…

EPAI手绘建模APP动画、场景、手势操作

(15) 动画 图 299 动画控制器 ① 打开动画控制器。播放动画过程中&#xff0c;切换场景观察视角时&#xff0c;自动停止播放。动画编辑参见常用工具栏-更多-动画动画编辑器部分。 ② 关闭动画控制器。 ③ 设置动画参数&#xff1a;设置动画总帧数&#xff1b;这只帧率&#x…

docker安装nginx支持ssl 实现https访问(完整版)

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 本文简介 2. docker安装nginx支持ssl2.0 准备ssl证书(例: 阿里云)2.0.1 配置域名解析2.0.2 找到数字证书管理服务并签发ssl证书2.0.3 选择默认证书 填写域名 创建2.0.4 提交审核, 签发成功2.0.5 解压并上传到宿主机ssl路径下 …

FFmpeg常用API与示例(三)—— 音视频解码与编码

编解码层 1.解码 (1) 注册所有容器格式和 CODEC:av_register_all() (2) 打开文件:av_open_input_file() (3) 从文件中提取流信息:av_find_stream_info() (4) 穷举所有的流&#xff0c;查找其中种类为 CODEC_TYPE_VIDEO (5) 查找对应的解码器:avcodec_find_decoder() (6) …

解决电脑睡眠后,主机ping不通VMware虚拟机

文章目录 问题解决方法方法一方法二注意 问题 原因&#xff1a;电脑休眠一段时间&#xff0c;再次打开电脑就ping不通VMware虚拟机。 解决方法 方法一 重启电脑即可&#xff0c;凡是遇到电脑有毛病&#xff0c;重启能解决90%问题。但是重启电脑比较慢&#xff0c;而且重启…

Linux 磁盘分区工具 gdisk / fdisk

fdisk 是传统的 Linux 磁盘分区工具&#xff0c;磁盘容量有2T的大小限制&#xff1b;gdisk 又叫 GPT fdisk, 作为 fdisk 的升级版&#xff0c;主要使用的是GPT分区类型&#xff0c;用来划分容量大于2T的硬盘&#xff0c;本文介绍使用方法。 简介 早期的磁盘使用 fdisk 工具分区…

C——单链表

一.前言 我们在前面已经了解了链表中的双向链表&#xff0c;而我们在介绍链表分类的时候就说过常用的链表只有两种——双向带头循环链表和单向不带头不循环链表。下来我来介绍另一种常用的链表——单向不带头不循环链表也叫做单链表。不清楚链表分类的以及不了解双向链表的可以…

Prometheus-Operator:快速部署

1. 项目目标 &#xff08;1&#xff09;了解Prometheus-Operator的优势 &#xff08;2&#xff09;熟练掌握Prometheus-Operator部署 &#xff08;3&#xff09;操作Grafana对接Prometheus 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 Prometheus 主机IP Prom…

如何克服挑战?跨境电商平台开发中的关键挑战解析

在当今的数字化时代&#xff0c;跨境电商平台开发成为了许多企业所关注的焦点。然而&#xff0c;随之而来的是一系列挑战&#xff0c;需要克服才能确保项目成功推进。从法律合规、支付结算到物流运输&#xff0c;跨境电商平台开发中的挑战多而复杂。本文将针对跨境电商平台开发…

【Matlab】Matlab之美,抓紧来膜拜大神的创星之作(附2024Matlab教程+代码)

软件介绍 MATLAB是一款商业数学软件&#xff0c;用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境&#xff0c;主要包括MATLAB和Simulink两大部分&#xff0c;可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序…

福派斯鸭肉梨狗粮,让狗狗告别泪痕困扰!值得一试吗?

亲爱的宠友们&#xff0c;你们是不是也为自家狗狗的泪痕问题头疼不已呢&#xff1f;&#x1f914;今天我就来给大家聊聊福派斯鸭肉梨去泪痕狗粮&#xff0c;看看这款狗粮究竟怎么样&#xff0c;去泪痕效果好不好&#xff0c;以及值不值得入手哦&#xff01; 首先&#xff0c;我…

【MySQL】SQL基本知识点DDL(1)

目录 1.SQL分类&#xff1a; 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类&#xff1a; 2.DDL-数据库操作 3.DDL-表操作-创建 注意&#xff1a;里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…

如何内网穿透,远程访问内网设备

文章目录 0.前言1.准备工作2.内网穿透原理3.配置公网服务器的frp5.配置访问内网主机6.配置win10的远程桌面访问&#xff08;win11类似&#xff09;7.参考资料 0.前言 最近想研究一些新东西&#xff0c;公司的机器不敢乱搞&#xff0c;公司测试的服务器安装软件太多&#xff0c…

【送书福利第六期】Java开发的150多个坑,你踩过几个?(文末送书)

文章目录 做Java开发别掉坑里还不知道 程序员为什么会掉到坑里却不自知&#xff1f;第一是意识不到坑的存在。第二是有些 bug 或问题只在特定情况下暴露。第三是变化不明显的性能问题。 《Java开发坑点解析&#xff1a;从根因分析到最佳实践》Java 开发完美避坑指南结语 &#…

zblog中用户中心-邀请码注册插件的导出功能补充

自己加了一个导出未使用的邀请码功能&#xff0c;可惜我不是入驻作者&#xff0c;没有权限发布&#xff0c;之前被一条大河拒了&#xff0c;他说我抄他代码&#xff0c;不给我过审还冷嘲热讽&#xff0c;我一气之下&#xff0c;就没继续申请了&#xff0c;话说我是专业搞java开…

中国地图(2024版审图号地图)和地图变化说明

2024版shp格式审图号地图预览图&#xff1a; 新版中国地图的变化&#xff08;简述&#xff09; 国土面积的增加&#xff1a;新版中国地图显示&#xff0c;中国的国土面积从960万平方公里增加到1045万平方公里&#xff0c;增加了85万平方公里。 九段线变为十段线&#xff1a;…

RFID工业读写器在危化品储存管理的优势有哪些?

在化学品和危险品储存管理领域&#xff0c;传统的管理方式通常存在一些痛点和挑战&#xff1a;化学品和危险品的管理主要依赖于人工记录和监控&#xff0c;容易出现数据不准确、遗漏、混淆等问题&#xff0c;导致安全隐患和管理困难。化学品和危险品的存储和管理涉及到一系列安…

#04 构建您的第一个神经网络:PyTorch入门指南

文章目录 前言理论基础神经网络层的组成前向传播与反向传播 神经网络设计步骤1&#xff1a;准备数据集步骤2&#xff1a;构建模型步骤3&#xff1a;定义损失函数和优化器步骤4&#xff1a;训练模型步骤5&#xff1a;评估模型结论 前言 在过去的几天里&#xff0c;我们深入了解了…

InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!

VSCode中的CodeGeeX 插件上线InLine Chat功能后&#xff0c;收到不少用户的反馈&#xff0c;大家对行内交互编程这一功能非常感兴趣。近期我们针对这个功能再次进行了深度优化&#xff0c;今天详细介绍已经在VSCode插件v2.8.0版本上线的 CodeGeeX InLine Chat功能&#xff0c;以…