设计模式之:享元模式FlyweightPattern的实现

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
享元模式的理解:

享元模式的定义:运用共享技术支持大量细粒度对象的复用;

Flyweight Pattern Definition:Use sharing to support large numbers of fine-grained efficiently.

享元模式关键词:大量、细粒度、复用、享元池、享元工厂;

  1. 当系统中存在大量的细粒度的相同或相似对象时,可以使用享元模式;
  2. 享元模式通过共享技术,实现相同或相似对象的重复利用;
  3. 享元的字面理解:享也就是分享共享的意思,元就是共享的元素、对象;
  4. Flyweight的字面理解:Flyweight本意是拳击运动的一个术语,就是蝇量级的意思,flyweight 蝇量级 112磅;
  5. 享元模式也叫轻量级模式,享元是对Flyweight的意译,直译的话应该叫蝇量级模式;
  6. 英文定义中采用Flyweight,是想表达对象的粒度,也就是fine-grained细粒度的意思;
  7. grain本意表示谷物,grained表示像谷物那种颗粒状态,即粒度,而fine-grained则表示细粒度,例如fine grained soil 细土、coarse grained soil粗粒土;
  8. 享元模式和Unity中的预制体作用类似,享元模式可以通过共享元素生成多个对象,Unity同样可以通过Prefabs生成成千上万的怪物;
  9. 还有诸如对象池、线程池,实际上也是享元模式的使用案例;

类图with StarUML

棋子抽象类和2个实现类

    internal abstract class Chessman{public abstract string GetColor();public void Display() { Console.WriteLine($"棋子颜色{this.GetColor()}"); }}
    internal class BlackChessman : Chessman{public override string GetColor() { return "黑色"; }}
    internal class WhiteChessman : Chessman{public override string GetColor() { return "白色"; }}

享元工厂类

    internal class ChessmanFactory{//饿汉式单例模式private static ChessmanFactory instance = new ChessmanFactory();//该字典相当于享元池(对象池)Flyweight Poolprivate Dictionary<string, Chessman> dictionary;//构造注入依赖项Chessman/BlackChessman/WhiteChessmanprivate ChessmanFactory(){dictionary = new Dictionary<string, Chessman>();Chessman black = new BlackChessman();Chessman white = new WhiteChessman();dictionary.Add("b", black);dictionary.Add("w", white);}//返回唯一实例public static ChessmanFactory GetInstance() { return instance; }//根据键是b还是w,返回字典中的对应棋子public Chessman GetChessman(string color) { return dictionary[color]; }}

客户端

    internal class Program{static void Main(string[] args){Chessman black1, black2, white1, white2;ChessmanFactory factory = ChessmanFactory.GetInstance();//生成两颗黑子,并比较black1 = factory.GetChessman("b");black2 = factory.GetChessman("b");Console.WriteLine($"两颗黑子是否相同?{black1 == black2}");//生成两颗白字,并比较white1 = factory.GetChessman("w");white2 = factory.GetChessman("w");Console.WriteLine($"两颗白子是否相同?{black1 == black2}");//显示棋子black1.Display();black2.Display();white1.Display();white2.Display();Console.Read();}}

运行结果

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

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

相关文章

7.中文输入验证-原生JS

1 <!DOCTYPE html>2 <html>3 <head lang"en">4 <meta charset"UTF-8">5 <title>中文输入验证-原生JS</title>6 </head>7 <body>8 <input type"text" id"num" οnblur&quo…

(转)CentOs 设置静态IP 方法

在做项目时由于公司局域网采用自动获取&#xff29;&#xff30;的方式&#xff0c;导到每次服务器重启主机&#xff29;&#xff30;都会变化。为了解决这个问题&#xff0c;我参考了http://blog.sina.com.cn/s/blog_537977e50100qhb5.html的文章然后根据自己的情况设置静态IP…

php资源索引

2019独角兽企业重金招聘Python工程师标准>>> w3school http://www.w3school.com.cn/php/func_mysql_result.asp osc代码分享 http://www.oschina.net/code/list/?langphp&catalog&showtime&sort&p110 CRUD例子&#xff1a; http://git.oschina…

掌握JavaScript中的迭代器和生成器,顺便了解一下async、await的原理

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 掌握JavaScript中的迭代器和生成器&#xff0c;顺便了解一下async、await的原理 前言 相信很多人对迭代器和生成器都不陌…

Boot loader: Grub入门(转)

Boot Loader: Grub 在看完了前面的整个启动流程&#xff0c;以及核心模块的整理之后&#xff0c;你应该会发现到一件事情&#xff0c; 那就是『 boot loader 是加载核心的重要工具』啊&#xff01;没有 boot loader 的话&#xff0c;那么 kernel 根本就没有办法被系统加载的呢&…

网页设计趋势:模糊背景在网站中的经典应用案例

如今&#xff0c;网页设计领域出现了多种创新的设计方法&#xff0c;例如视差滚动&#xff0c;全屏背景&#xff0c;单页设计等等。今天这篇文章向大家介绍另一种新的网页设计趋势——模糊背景。这种类似于摄影拍摄的效果应用在网页中能够突出主题内容&#xff0c;同时若隐若现…

magento去除子分类的url地址中带有父分类的url key

2019独角兽企业重金招聘Python工程师标准>>> app/code/core/Mage/Catalog/Model/Url.php 找到如下代码 方法getCategoryRequestPath if (null $parentPath) {$parentPath $this->getResource()->getCategoryParentPath($category);}elseif ($parentPath /…

深度学习(三)之LSTM写诗

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目录* 数据预处理 构建数据集模型结构生成诗 根据上文生成诗生成藏头诗 参考 根据前文生成诗&#xff1a; 机器学习业&…

C# 将PDF转为Excel

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 通常&#xff0c;PDF格式的文档能支持的编辑功能不如office文档多&#xff0c;针对PDF文档里面有表格数据的&#xff0c;如果…

SQL Server R2 地图报表制作(五)

SQL Server R2 地图报表制作&#xff08;五&#xff09; 2.3 向地图中添加线条层 在上述报表的基础上&#xff0c;我们接下来添加一个表示两个商店间路线的地图层&#xff0c;这里我们依旧使用SQL空间数据源&#xff0c;部分步骤与上一节类似&#xff0c;所不同的是相应的SQL语…

SQL Server 2005新特性之使用with关键字解决递归父子关系

1. 引言 现实项目中经常遇到需要处理递归父子关系的问题&#xff0c;如果把层次关系分开&#xff0c;放在多个表里通过主外键关系联接&#xff0c;最明显的问题就是扩展起来不方便&#xff0c;对于这种情况&#xff0c;一般我们会创建一个使用自连接的表来存放数据。例如存放会…

做订购系统必须要明白的几点

2019独角兽企业重金招聘Python工程师标准>>> 对价格的疑问&#xff1f; 1、用户容易把单位搞错&#xff0c;你标注的是单价&#xff0c;他理解的是整套的价格。譬如你标注的是一粒糖的价格&#xff0c;但卖的是一包糖10粒。 新增单&#xff1f;我拍了之后还想补充 2…

Oracle安装 - shmmax和shmall设置

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 一、概述 在Linux上安装oracle&#xff0c;需要对内核参数进行调整&#xff0c;其中有shmmax和shmall这两个参数&#xff…

彻底理解js中this的指向

首先必须要说的是&#xff0c;this的指向在函数定义的时候是确定不了的&#xff0c;只有函数执行的时候才能确定this到底指向谁&#xff0c;实际上this的最终指向的是那个调用它的对象&#xff08;这句话有些问题&#xff0c;后面会解释为什么会有问题&#xff0c;虽然网上大部…

带码农《手写Mybatis》进度3:实现映射器的注册和使用

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&…

01背包问题,动态规划求解

01背包问题&#xff1a; 1.递归思想 0- 1 背包问题如果采用递归算法来描述则非常清楚明白, 它的算法根本思想是假设用布尔函数knap( s, n) 表示n 件物品放入可容质量为s 的背包中是否有解( 当knap 函数的值为真时 说明问题有解,其值为假时无解) . 我们可以通过输入s 和n 的值, …

SonarQube代码质量管理平台安装与使用

SonarQube代码质量管理平台安装与使用 注原文地址&#xff1a;http://blog.csdn.net/hunterno4/article/details/11687269Sonar简介 Sonar是一个用于代码质量管理的开源平台&#xff0c;用于管理源代码的质量&#xff0c;可以从七个维度检测代码质量 通过插件形式&#xff0c;可…

docker容器编排原来这么丝滑~

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 前言&#xff1a; 请各大网友尊重本人原创知识分享&#xff0c;谨记本人博客&#xff1a;南国以南i 概念介绍&#xff1a…

互联网思维的“独孤九剑”

课前秀&#xff1a;三个段子 第一个段子&#xff1a;有一个毫无餐饮行业经验的人&#xff0c;他开了一家餐馆&#xff0c;菜品只有12道&#xff0c;在北京只有两家分店&#xff1b;仅两个月时间&#xff0c;就实现了所在商场餐厅坪效第一名&#xff1b;绿茶单位坪效大约是100元…

linux系统分析工具续-SystemTap和火焰图(Flame Graph)

本文为网上各位大神文章的综合简单实践篇&#xff0c;参考文章较多&#xff0c;有些总结性东西&#xff0c;自认暂无法详细写出&#xff0c;建议读文中列出的参考文档&#xff0c;相信会受益颇多。下面开始吧&#xff08;本文出自 “cclo的博客” 博客&#xff0c;请务必保留此…