博客
关于我
Flyweight享元模式
阅读量:396 次
发布时间:2019-03-05

本文共 2185 字,大约阅读时间需要 7 分钟。

享元模式

简介

享元模式是一种面向对象设计模式,通过共享对象来有效支持大量细粒度的对象需求。这种模式特别适用于在系统中需要频繁创建对象但又不愿意为每个对象都分配大量资源的情况。

优势

传统的面向对象编程中,频繁创建对象会导致性能问题,尤其是在处理大量对象时。享元模式通过共享对象实例,减少了对象的数量,从而降低了系统的运行代价。这种模式在处理灵活性和可扩展性方面具有显著优势。

原理

享元模式建立在工厂模式之上,核心思想是通过工厂方法创建对象,同时增加了对象缓存功能。这种缓存机制使得多个请求可以共享同一个实例,从而提高了系统的效率。

类图

以下是一个典型的享元模式类图示:

+-------------------+|                  ||  Flyweight        ||                  |+-------------------+     ^          ^     |          |     v          v+-------------------+|  ConcreteFlyweight||                  |+-------------------+

示例

以下是一个使用享元模式的典型示例:

public class Character{    // 内在状态    protected char _symbol;    protected int _size;    protected string _font;    // 外部状态    protected Position _position;    public void Display(Position position)    {        Console.WriteLine("字符: {0}, 字号: {1}, 字体: {2}, 位置: ({3}, {4})",             _symbol, _size, _font, position._x, position._y);    }}public class CharacterA : Character{    public CharacterA()    {        _symbol = 'A';        _size = 10;        _font = "宋体";    }}public class CharacterFactory{    private Dictionary
_characters = new Dictionary
(); public Character this[char key] { get { Character character = null; if (_characters.ContainsKey(key)) { character = _characters[key]; } else { string name = this.GetType().Namespace + "." + "Character" + key.ToString(); character = Activator.CreateInstance(Type.GetType(name)) as Character; _characters.Add(key, character); } return character; } }}public class Program{ public static void Main(string[] args) { string text = "ABZABBZZ"; char[] letters = text.ToCharArray(); var characterFactory = new CharacterFactory(); var rd = new Random(); foreach (char c in letters) { Character character = characterFactory[c]; Position p = new Position(rd.Next(0, 100), rd.Next(0, 100)); character.Display(p); } Console.ReadKey(); }}

典型应用场景

享元模式在以下场景中表现尤为突出:

  • 字符显示(如文本渲染)
  • 图像绘制
  • 扩展性需求
  • 性能敏感的系统

转载地址:http://fdozz.baihongyu.com/

你可能感兴趣的文章
NPM酷库052:sax,按流解析XML
查看>>
npm错误 gyp错误 vs版本不对 msvs_version不兼容
查看>>
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>
npm,yarn,cnpm 的区别
查看>>
NPOI
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>
NPOI初级教程
查看>>
NPOI利用多任务模式分批写入多个Excel
查看>>
NPOI在Excel中插入图片
查看>>
NPOI将某个程序段耗时插入Excel
查看>>
NPOI格式设置
查看>>
NPOI设置单元格格式
查看>>
Npp删除选中行的Macro录制方式
查看>>
NR,NF,FNR
查看>>
nrf24l01+arduino
查看>>
nrf开发笔记一开发软件
查看>>
nrm —— 快速切换 NPM 源 (附带测速功能)
查看>>
nrm报错 [ERR_INVALID_ARG_TYPE]
查看>>
NS3 IP首部校验和
查看>>
NSDateFormatter的替代方法
查看>>