设计模式之:享元模式FlyweightPattern的实现
享元模式的理解:
享元模式的定义:运用共享技术支持大量细粒度对象的复用;
Flyweight Pattern Definition:Use sharing to support large numbers of fine-grained efficiently.
享元模式关键词:大量、细粒度、复用、享元池、享元工厂;
- 当系统中存在大量的细粒度的相同或相似对象时,可以使用享元模式;
- 享元模式通过共享技术,实现相同或相似对象的重复利用;
- 享元的字面理解:享也就是分享共享的意思,元就是共享的元素、对象;
- Flyweight的字面理解:Flyweight本意是拳击运动的一个术语,就是蝇量级的意思,flyweight 蝇量级 112磅;
- 享元模式也叫轻量级模式,享元是对Flyweight的意译,直译的话应该叫蝇量级模式;
- 英文定义中采用Flyweight,是想表达对象的粒度,也就是fine-grained细粒度的意思;
- grain本意表示谷物,grained表示像谷物那种颗粒状态,即粒度,而fine-grained则表示细粒度,例如fine grained soil 细土、coarse grained soil粗粒土;
- 享元模式和Unity中的预制体作用类似,享元模式可以通过共享元素生成多个对象,Unity同样可以通过Prefabs生成成千上万的怪物;
- 还有诸如对象池、线程池,实际上也是享元模式的使用案例;
类图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 Pool
private Dictionary<string, Chessman> dictionary;
//构造注入依赖项Chessman/BlackChessman/WhiteChessman
private 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();
}
}
运行结果

设计模式之:享元模式FlyweightPattern的实现的更多相关文章
- 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
原文:乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) 作者:weba ...
- python设计模式之享元模式
python设计模式之享元模式 由于对象创建的开销,面向对象的系统可能会面临性能问题.性能问题通常在资源受限的嵌入式系统中出现,比如智能手机和平板电脑.大型复杂系统中也可能会出现同样的问题,因为要在其 ...
- 【GOF23设计模式】享元模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_享元模式.享元池.内部状态.外部状态.线程池.连接池 package com.test.flyweight; /** * ...
- 设计模式之享元模式(Flyweight)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- Head First设计模式之享元模式(蝇量模式)
一.定义 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. ...
- 【Unity3D与23种设计模式】享元模式(Flyweight)
GoF中定义: "使用共享的方式,让一大群小规模对象能更有效地运行" 享元模式一般应用在游戏角色属性设置上 游戏策划需要通过"公式计算"或者"实际测试 ...
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- 【设计模式】享元模式(Flyweight)
摘要: 1.本文将详细介绍享元模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入享元模式 2. 享元模式的概念及优缺点介绍 3. 享元模式在Android源码中的应用 1 ...
随机推荐
- table表格的td行利用css显示...
默认超过指定长度以...显示, 鼠标放到文本上显示全 代码如下 .fh{ max-width:220px; word-wrap:break-word; text-overflow:ellipsis ...
- laravel redis操作大全
字符串操作 普通得set/get操作,set操作,如果键名存在,则会覆盖原有得值 $redis = app("redis.connection"); $redis->set( ...
- Web调试工具之调试方法
转载于: http://toutiao.com/news/6242781162012410370/ 一.Firefox 插件之 Firebug, 火狐调试利器[初学必备] 为什么要第一个提到火狐呢?因 ...
- IDEA版部署离线ArcGIS api for JavaScript
痛苦!折磨! 这两天发现IDEA 做ArcGIS api 开发比EClipse好用(重点是没有JS提示).但引入的ArcGIS api 一直报错,说找不到.这两天思来想去就是不知道为什么找不到loca ...
- 6月19日 python学习总结 Django之路由系统
Django之路由系统 Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调 ...
- Windows10与Centos7双系统安装踩的坑
1. 首先安装windows(太简单不说了) 2.然后安装Centos7(太简单不说了) 3.注意:安装完Centos7重启电脑进入系统引导项突然发现没有Windows引导项 0x06 恢复Windo ...
- MyBatis in
- 以B tree和B+ tree的区别来分析mysql索引实现
B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点.B树示意图如下: Paste_Image.png B树的特点: (1)所有键值分布在整个树中 (2)任何关键字出现且 ...
- Servlet的会话机制?
因为http协议是无状态协议,又称为一次性连接,所以webapp必须有一种机制 能够记住用户的一系列操作,并且唯一标示一个用户. Cookie: 又称为小饼干,实际就是使用一个短文本保存用户信息, 在 ...
- 分布式HDFS的安装和启动(二)
一.分布式HDFS的安装和启动①在$HADOOP_HOME/etc/hadoop/core-site.xml文件<property> <name>fs.defaultFS< ...