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

embedded/2024/9/24 6:13:50/

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

享元模式中,对象被分为两种部分:内部状态(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.ppmy.cn/embedded/10755.html

相关文章

鸿蒙开发模拟器的坑, No Devices

问题 我已经安装了模拟器&#xff0c;并且模拟器已经运行了 在Device Manager页面开启模拟器 No Devices 但是这里没有模拟器的选项 解决 添加环境变量 下面步骤 1、清除用户数据 2、 关闭Device Manager 3、 关闭ide 重启ide、开启模拟器 看到有模拟器的选项了

轻松记录收支明细,详细记录每一笔收支,通过借款日期快速查找借款信息

财务管理对于个人和企业来说都至关重要。一份清晰、详尽的收支明细记录&#xff0c;不仅能帮助我们了解资金流向&#xff0c;还能在需要时提供有力的证据。因此&#xff0c;高效记录收支明细并轻松掌握财务状况成为了每个人的必备技能 第一步进入晨曦记账本主页面&#xff0c;…

Golang | Leetcode Golang题解之第40题组合总和II

题目&#xff1a; 题解&#xff1a; func combinationSum2(candidates []int, target int) (ans [][]int) {sort.Ints(candidates)var freq [][2]intfor _, num : range candidates {if freq nil || num ! freq[len(freq)-1][0] {freq append(freq, [2]int{num, 1})} else {…

Java8 中map中删除元素的简单方法

通过values删除 map.values().removeIf(value -> !value.contains("1"));通过keySet删除 map.keySet().removeIf(key -> key ! 1);通过entrySet删除 map.entrySet().removeIf(entry -> entry.getKey() ! 1);

盲人导航设备制造:赋能独立出行,革新生活体验

作为资深记者&#xff0c;我有幸亲历了一场由盲人导航设备制造领域创新成果所驱动的独立出行体验。一款名为蝙蝠避障的导航辅助应用&#xff0c;以其实时避障功能与便捷的人体工学设计&#xff0c;彻底改变了视障人士的出行方式&#xff0c;使之更加安全、自由。 首先&#xf…

spring-core:理解@AliasFor注解的作用

AliasFor是spring注解体系中一个非常重要且基础的注解。顾名思义&#xff0c;它的基本作用就是为注解字段定义一个别名。 基本作用&#xff1a;字段别名 Testpublic void test3AliasFor() {try {{CasbanScan casbanScan AnnotationUtils.findAnnotation(UserSummy.class, Cas…

中国人民解放军信息支援部队成立

中国人民解放军信息支援部队成立 ----------强化信息化战争能力&#xff0c;维护国家安全 阅读须知&#xff1a; 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或…

CP6350-1008-0020倍福工控机主板维修Beckhoff工业机器人主机电脑深圳捷达工控维修

在工业自动化领域&#xff0c;倍福工控机主板以其卓越的稳定性和高效性能&#xff0c;广泛应用于各种控制系统。然而&#xff0c;即便是高质量的硬件设备&#xff0c;也难免会出现故障。CP6350-1008-0020倍福工控机主板维修&#xff0c;就是针对这一型号主板可能出现的各种问题…