当前位置: 首页 > news >正文

设计模式-享元模式

概述

享元模式是一种结构类型的设计模式,目的是在创建对象的时候,使用已有的对象代替新的对象的创建,减少内存的消耗提升性能。主要有,享元接口,享元类和享元工厂组成,通过享元工厂管理对应类的创建,而不是直接创建新的对象,然后再使用对应的类,这个共用的思想也类似于对象池的概念


需求:创建三个角色,法师战士刺客,每个都有自己的行为,当创建重复的角色的时候,可以复用对象。

享元模式

internal class Program
{private static void Main(string[] args){var factory = new Factory();var FS = factory.GetCharacter("法师");var ZS = factory.GetCharacter("战士");var CK = factory.GetCharacter("刺客");FS.Behavior("法术");ZS.Behavior("攻击");CK.Behavior("刺杀");var CK1 = factory.GetCharacter("法师");CK1.Behavior("法术");}public interface ICharacter//角色接口{void Behavior(string _Behavior);}public class Character : ICharacter//角色{private string Name;public Character(string name){Name = name;}public void Behavior(string _Behavior){Console.WriteLine($"角色{Name}执行{_Behavior}!");}}public class Factory//享元工厂{private Dictionary<string, ICharacter> keyValuePairs = new Dictionary<string, ICharacter>();public ICharacter GetCharacter(string name)//获取角色,如果没有就创建,有就返回已有的{if (!keyValuePairs.ContainsKey(name)){keyValuePairs[name] = new Character(name);}else{Console.WriteLine($"使用了已存在的元素{name}");}return keyValuePairs[name];}}
}

输出:

角色法师执行法术!
角色战士执行攻击!
角色刺客执行刺杀!
使用了已存在的元素法师
角色法师执行法术!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HTTP 之 头部信息(二)
  • Vue3+vite+ts 项目使用mockjs
  • 【C++ 面试 - 基础题】每日 3 题(十六)
  • 质量对中国开发商提升游戏品牌信誉和信任度的影响
  • Java设计模式之中介者模式
  • 【SpringBoot】SpringBoot框架的整体环境搭建和使用(整合Mybatis,Druid,Junit4,PageHelper,logback等)
  • Android 13 移植EthernetSettings/Ethernet更新
  • Java设计模式之策略模式实践
  • MATLAB R2023b配置Fortran编译器
  • java基础进阶——log日志、类加载器、XML、单元测试、注解、枚举类
  • 使用openlayers给地图添加内发光、外发光、内外阴影、三维立体效果
  • 可乐机的设计验证
  • 125. 验证回文串【 力扣(LeetCode) 】
  • 设计模式 - 状态模式
  • 详解使用Goalng+Redis实现分布式锁
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 230. Kth Smallest Element in a BST
  • 4个实用的微服务测试策略
  • css系列之关于字体的事
  • JavaScript 奇技淫巧
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • mysql中InnoDB引擎中页的概念
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • vue:响应原理
  • VuePress 静态网站生成
  • 程序员该如何有效的找工作?
  • 分享一份非常强势的Android面试题
  • 一文看透浏览器架构
  • 优化 Vue 项目编译文件大小
  • 字符串匹配基础上
  • ​ubuntu下安装kvm虚拟机
  • ​补​充​经​纬​恒​润​一​面​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (bean配置类的注解开发)学习Spring的第十三天
  • (八十八)VFL语言初步 - 实现布局
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (九)信息融合方式简介
  • (面试必看!)锁策略
  • (十八)Flink CEP 详解
  • .JPG图片,各种压缩率下的文件尺寸
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net 8.0 新的变化
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NetCore 如何动态路由
  • .NET关于 跳过SSL中遇到的问题
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • ??javascript里的变量问题
  • @Mapper作用
  • [20190113]四校联考
  • [AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现
  • [C][栈帧]详细讲解
  • [C++]——继承 深继承