.NET高级面试指南专题二十七【享元模式介绍,通过共享对象来最大程度地减少内存使用和提高性能】

享元模式是一种结构型设计模式,旨在通过共享对象来最大程度地减少内存使用和提高性能。

在享元模式中,对象被分为两种部分:内部状态(intrinsic state)和外部状态(extrinsic state)。内部状态是对象共享的部分,而外部状态是对象的变化部分,它们在对象被创建后可以被改变。

下面是享元模式的一些优点和缺点:

优点:

  • 节省内存:通过共享对象,可以减少系统中的内存占用。
  • 提高性能:减少对象的数量可以提高系统的性能,尤其是在需要大量相似对象时。
  • 简化对象的创建:通过享元工厂(Flyweight Factory)来管理共享对象的创建,可以简化对象的创建过程。

缺点:

  • 复杂性增加:引入了内部状态和外部状态的概念,增加了系统的复杂性。
  • 对象状态共享:共享对象的状态可能会导致对象之间的相互影响,需要额外的逻辑来管理状态的改变。
  • 不适合所有情况:并不是所有对象都适合被共享,有时候会因为共享而增加系统的复杂性。

演示代码:

using System;
using System.Collections.Generic;// 享元接口
interface IShape
{void Draw(string color);
}// 具体享元类
class Circle : IShape
{private string _name;public Circle(string name){this._name = name;}public void Draw(string color){Console.WriteLine($"Drawing {_name} with color {color}");}
}// 享元工厂
class ShapeFactory
{private Dictionary<string, IShape> _shapes = new Dictionary<string, IShape>();public IShape GetShape(string name){if (!_shapes.ContainsKey(name)){_shapes[name] = new Circle(name);}return _shapes[name];}
}class Program
{static void Main(string[] args){ShapeFactory shapeFactory = new ShapeFactory();// 绘制红色圆形IShape circle1 = shapeFactory.GetShape("Circle");circle1.Draw("Red");// 绘制蓝色圆形IShape circle2 = shapeFactory.GetShape("Circle");circle2.Draw("Blue");// 绘制绿色圆形IShape circle3 = shapeFactory.GetShape("Circle");circle3.Draw("Green");}
}

Circle 类表示具体的享元类,ShapeFactory 类是享元工厂,负责创建并管理共享的对象。通过共享相同的圆形对象,可以减少内存使用和提高性能。

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

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

相关文章

windows系统下python开发工具安装

一. 简介 前一篇文章学习了安装 python解释器&#xff0c;文章如下&#xff1a; windows系统下python解释器安装-CSDN博客 本文来学习如何下载安装 python开发工具 PyCharm。 二. python开发工具 PyCharm下载安装 1. PyCharm官网 PyCharm开发工具 PyCharm为 python代码…

C语言程序每日一练(9、楼梯)

探索打印楼梯与笑脸的奇妙之旅 在这篇博客中&#xff0c;我将分享一段有趣的代码&#xff0c;它可以打印出一个楼梯的图案&#xff0c;同时在楼梯上方打印出两个笑脸。 首先&#xff0c;让我们来看看代码的实现。这段代码使用了i控制行&#xff0c;j来控制列&#xff0c;通过j…

Fast DDS之Qos与Profiles

目录 XML profiles加载创建修改可配置内容 QosDeadlineQosPolicyDestinationOrderQosPolicyDurabilityQosPolicyDurabilityServiceQosPolicyEntityFactoryQosPolicyGroupDataQosPolicyHistoryQosPolicyLatencyBudgetQosPolicyLivelinessQosPolicyOwnershipQosPolicyOwnershipSt…

python基础知识四(列表、元组、函数)

目录 list 列表&#xff1a; 1. 列表的概念 2. 列表的特点 3. 列表的创建 4. 列表的索引 5. 列表的切片 6. 列表的遍历 7. 列表的常用方法 tuple 元组&#xff1a; 1. 什么是元组&#xff1f; 2. 元组的定义 3. 元组的特点和作用 函数&#xff1a; 1. 函数的概念…

Llama网络结构介绍

LLaMA现在已经是开源社区里炙手可热的模型了&#xff0c;但是原文中仅仅介绍了其和标准Transformer的差别&#xff0c;并没有一个全局的模型介绍。因此打算写篇文章&#xff0c;争取让读者不参考任何其他资料把LLaMA的模型搞懂。 结构 如图所示为LLaMA的示意图&#xff0c;由…

域名被污染了只能换域名吗?

域名污染是指域名的解析结果受到恶意干扰或篡改&#xff0c;使得用户在访问相关网站时出现异常。很多域名遭遇过污染的情况&#xff0c;但是并不知道是域名污染&#xff0c;具体来说&#xff0c;域名污染可能表现为以下情况&#xff1a;用户无法通过输入正确的域名访问到目标网…

24.4.20 蚂蚁笔试(开发)a1.09

只是个人记录&#xff0c;玻璃心请大佬轻喷&#xff0c;如果有幸能得到大佬的指教那就更好啦~ 若干单选和多选&#xff0c;感觉没有太难。下面是三个算法题&#xff08;记不住具体的题目了&#xff0c;&#xff09; 题目1 大致题意&#xff1a;数组a有n个元素&#xff0c;让…

Windos环境下配置免费SSL证书详细步骤

获取免费证书 配置本机模拟域名 打开如下目录&#xff0c;hosts文件 C:\Windows\System32\drivers\etc 添加如下配置并保存 127.0.0.1 im.test.com下载安装 OpenSSL 下载链接 进入bin目录&#xff0c; 打开cmd窗口 执行如下命令&#xff0c;生成RSA私钥 ## 使用des3…

大型集团企业 怎么实现多区域文件交换?

很多大型集团企业&#xff0c;都会在全国各地&#xff0c;甚至海外&#xff0c;都设立分支机构&#xff0c;还有银行、邮政这类机构&#xff0c;都会在全国各地设立多个支行和网点&#xff0c;所以在日常经营过程中&#xff0c;都会存在多区域文件交换的场景。 大型集团企业在进…

JVM垃圾收集器--分区收集器

G1收集器 G1&#xff08;Garbage-First Garbage Collector&#xff09;在 JDK 1.7 时引入&#xff0c;在 JDK 9 时取代 CMS 成为了默认的垃圾收集器。G1 有五个属性&#xff1a;分代、增量、并行、标记整理、STW。 分代 G1收集器 将内部分为多个大小相等的区域&#xff0c;另…

Unity Shader 图形学【笔记一】

游戏图形学 源自&#xff1a;计算机图形学 涵盖&#xff1a;图形、动画的创建渲染展示 目标&#xff1a;性能优化、提高视觉质量&#xff0c;增强用户体验 技术&#xff1a;三维模型、纹理、光照、阴影、特效、动画、物理模拟、碰撞检测等 Unity Shader 是&#xff1a;un…

基于Vue+ElementPlus自定义带历史记录的搜索框组件

前言 基于Vue2.5ElementPlus实现的一个自定义带历史记录的搜索框组件 效果如图&#xff1a; 基本样式&#xff1a; 获取焦点后&#xff1a; 这里的历史记录默认最大存储10条&#xff0c;同时右侧的清空按钮可以清空所有历史记录。 同时搜索记录也支持点击搜索&#xff0c;按…

c++ reinterpret_cast类型转换简单实验

1.概要 c提供如下几种转换&#xff0c;具体如下。 static_cast&#xff1a;用于非多态类型的转换。 dynamic_cast:用于多态类型的转换&#xff0c;主要用于向下类型转换&#xff08;从基类指向派生类的指针/引用&#xff09;&#xff0c;会检查转换的有效性&#xff0c;如果转…

371D - Vessels

思路&#xff1a;用并查集维护&#xff0c;如果当前容器没有满&#xff0c;就指向自己&#xff0c;否则指向下一个容器。 这样就可以快速 find 到下一个没有满的容器&#xff0c;从而模拟询问 1。 代码&#xff1a; void solve(){int n;cin >> n;vector<int>p(n …

leetcode:滑动窗口----3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

算法竞赛相关问题总结记录

前言 日常在校生或者是工作之余的同学或多或少都会参加一些竞赛,参加竞赛一方面可以锻炼自己的理解与实践能力&#xff0c;也能够增加自己的生活费&#xff0c;竞赛中的一些方案也可以后续作为自己论文的base,甚至是横向课题的框架。在算法竞赛中算法的差别个人感觉差距都不大&…

CUDA流与异步

CUDA流与异步 基于流的异步的内核启动和数据传输支持以下类型的粗粒度并发&#xff1a; 1.重叠主机计算和设备计算&#xff1b; 2.重叠主机计算和主机与设备间的数据传输&#xff1b; 3.重叠主机与设备间的数据传输和设备计算&#xff1b; 4.并发设备计算。 理解一个CUDA程序&…

安卓手机APP开发__媒体开发部分__播放器的接口

安卓手机APP开发__媒体开发部分__播放器的接口 目录 概述 组件之间的共同的接口 媒体3的播放的架构 播放器的状态 对改变的监听 当前的播放 定制的播放器实现 概述 一个播放器是你的APP中完成媒体项的播放的组件. 媒体3的播放器接口提供了一个关于播放器处理的功能的总…

一招搞定“找不到xinput1_3.dll,无法继续执行代码”问题

在我们日常使用电脑进行各类工作的过程中&#xff0c;特别是在运行一些关键性软件以完成特定任务时&#xff0c;电脑屏幕上突然弹出一条醒目的错误提示信息&#xff1a;“由于找不到xinput1_3.dll,无法继续执行代码”。这个错误通常发生在使用DirectInput库时&#xff0c;而xin…

Java Spring框架的核心优势是什么?

Spring框架是Java企业应用开发中广泛使用的开源框架&#xff0c;它旨在简化企业级应用的开发。Spring框架的核心优势主要体现在以下几个方面&#xff1a; 轻量级和松耦合&#xff1a;Spring框架设计得非常轻量级&#xff0c;它的大小和复杂性都相对较低&#xff0c;这使得开发者…