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://www.mzph.cn/web/10037.shtml

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

相关文章

【多客陪玩】陪玩小程序源码APP+小程序+公众号开发 -源码交付,线下可爆改家政,整理师等功能

简述 随着电竞行业的快速发展&#xff0c;电竞陪玩APP正在逐渐成为用户在休闲娱乐时的首选。为了吸引用户和提高用户体验&#xff0c;电竞陪玩APP开发需要定制一些特色功能&#xff0c;并通过合适的盈利模式来获得收益。本文将为您介绍电竞陪玩APP开发需要定制的特色功能以及常…

深入学习指针3

目录 前言 1.二级指针 2.指针数组 3.指针数组模拟二维数组 前言 Hello,小伙伴们我又来了&#xff0c;上期我们讲到了数组名的理解&#xff0c;指针与数组的关系等知识&#xff0c;那今天我们就继续深入到学习指针域数组的练联系&#xff0c;如果喜欢作者菌生产的内容还望不…

Python GraphQL服务器实现库之tartiflette使用详解

概要 Tartiflette是一个为Python编写的GraphQL服务器实现,它建立在现代异步编程库如asyncio之上,提供了高性能的GraphQL执行环境。Tartiflette专注于提供最佳的开发者体验,支持最新的GraphQL特性。 安装 安装Tartiflette相对简单,但需要依赖于一些系统级的库。 首先,需…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…

Python爬虫实战:爬取【某旅游交通出行类网站中国内热门景点】的评论数据,使用Re、BeautifulSoup与Xpath三种方式解析数据,代码完整

一、分析爬取网页&#xff1a; 1、网址 https://travel.qunar.com/2、 打开网站&#xff0c;找到要爬取的网页 https://travel.qunar.com/p-cs299979-chongqing进来之后&#xff0c;找到评论界面&#xff0c;如下所示&#xff1a;在这里我选择驴友点评数据爬取点击【驴友点评…

腾讯共享WiFi项目的加盟方式有哪些?

在这个互联互通的时代&#xff0c;共享经济的浪潮正以前所未有的力量席卷全球&#xff0c;而腾讯作为中国互联网巨头之一自然不会错过这场盛宴。其推出的腾讯共享WiFi项目自问世以来就备受瞩目&#xff0c;它不仅为用户提供便捷的上网服务&#xff0c;更为创业者打开了一个全新…

untiy 为预制体动态加载光照贴图

unity版本为2021.8 预制体不能携带光照贴图信息&#xff0c;只能我们自己准备了 多方查找加自己摸索终于找到了适合新版本的解决方案&#xff0c;直接贴代码 将这个脚本挂到预制体的最上级 using System.Collections; using System.Collections.Generic; using UnityEditor; …

美颜SDK是什么?深度学习技术在直播美颜SDK中的应用探析

美颜SDK的出现为直播、视频通话等应用提供了强大的美颜功能。接下来&#xff0c;我们将一同探讨美颜SDK的概念&#xff0c;以及深度学习技术在直播美颜SDK中的应用。 一、什么是美颜SDK&#xff1f; 美颜SDK是一种软件开发工具包&#xff0c;旨在为开发者提供便捷而强大的美颜…

四大误区:中台产品时设计你中招了几个?

01 误区一&#xff1a;管理系统分析工具数字化中台 传统企业在经营管理过程中会根据业务或管理需求&#xff0c;不断添加和升级诸如OA、CRM等不同类别的管理系统。 为了更好地响应前台的业务需求&#xff0c;有些企业成立了新的或扩大、加强了原有的技术部门&#xff0c;由…

C#上位机1ms级高精度定时任务

precisiontimer 安装扩展包 添加引用 完整代码 using PrecisionTiming;using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; us…

WinSCP软件出错:连接被意外关闭了

问题描述&#xff1a; WinSCP 登录 M3568 的 linux系统&#xff0c;提示 列出’/home/root’的目录项时出错&#xff0c;连接被意外关闭 具体提示如下图所示&#xff0c;列出’/home/root’的目录项时出错。 连接被意外关闭了 服务器发送命令的退出状态255 原因及解决&#xf…

notepad++安装 hex-editor插件

打开notepad 点击插件 搜索 hex-editor,点击右侧 安装install 安装成功后&#xff0c;在已安装插件中就有显示了

spring boot参数验证注解@NotNull、@NotBlank和@NotEmpty区别

目录 前言说明举例 前言 使用spring boot参数验证是常常会使用NotNull、NotBlank和NotEmpty三个判断是否不为空的注解&#xff0c;中文都有不能为空的意思&#xff0c;大部分使用者都傻傻分清它们之间到底有什么区别。今天就让咱们来一起探索它们之间的不同吧。 说明 注解名…

【数据库】数据库指令

一。数据库打开 1.命令行 2.进入mysql mysql -uroot -p密码 3.退出 exit&#xff1b; 二。针对数据库的操作 1.创建数据库&#xff08;有分号&#xff09; create database student; 2.使用数据库 use student 3.删除数据库&#xff08;有分号&#xff09; drop database…

数据库调优-数据库优化

数据库优化 如何发现复杂的SQL有问题&#xff1f; 一个个去explain吗&#xff1f;你有没有这样的困惑&#xff0c;开发代码运行顺畅丝滑&#xff0c;上生产了却卡的一逼&#xff1f; 哈哈&#xff0c;相信大家都会遇到这样的问题&#xff01; sql 复制代码 # 举个栗子&…

4. 从感知机到神经网络

目录 1. 从感知机到神经网络 2. 最简单的神经网络 3. 激活函数的引入 1. 从感知机到神经网络 之前章节我们了解了感知机&#xff0c;感知机可以处理与门、非与门、或门、异或门等逻辑运算&#xff1b;不过在感知机中设定权重的工作是由人工来做的&#xff0c;而设定合适的&a…

【将Maven源改为国内阿里云镜像源】

目录 一、如何配置Maven镜像源&#xff1f; 二、Idea中的Maven配置 ​三、项目与你本地仓库和中央仓库的联系 一、如何配置Maven镜像源&#xff1f; 1、打开你的Maven用户设置文件(settings.xml)。默认情况下&#xff0c;该文件存在于你的用户目录下的.m2文件夹中。如果你没…

Kafka 执行命令超时异常: Timed out waiting for a node assignment

Kafka 执行命令超时异常&#xff1a; Timed out waiting for a node assignment 问题描述&#xff1a; 搭建了一个kafka集群环境&#xff0c;在使用命令行查看已有topic时&#xff0c;报错如下&#xff1a; [rootlocalhost bin]# kafka-topics.sh --list --bootstrap-server…

《机器学习by周志华》学习笔记-决策树-01

本书中的「决策树」有时指学习方法,有时指学得的树。 1、基本流程 1.1、概念 基本流程,亦称「判定树」 决策树(decision tree),是一种常见的机器学习方法。以二分类任务为例,我们希望从给定训练数据集学得一个模型,用以对新样例进行分离。 以二分类任务为例,可看作对…

一图看懂 | 蓝卓煤炭行业解决方案

煤炭是我国能源保障的“压舱石,也是国民经济中重要的支柱产业之一无论是发电、建材、造纸、冶金、化工等工业领域都离不开煤炭近年来&#xff0c;在“双碳”及能源安全双重背景下推动智能化技术与煤炭产业的融合发展提升煤矿安全生产能力的重要性与日俱增智慧矿山的建设已逐渐成…