博客
关于我
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/

你可能感兴趣的文章
Pytest自动化测试框架,建议收藏。
查看>>
Pytest自动化测试框架:mark用法---测试用例分组执行
查看>>
pytest:4种方法实现 - 重复执行用例 - 展示迭代次数
查看>>
Pytest:一个卓有成效的测试工具
查看>>
python
查看>>
Python "HTTP Error 403: Forbidden"
查看>>
python %ns的作用
查看>>
Python + Appium 之 APP 自动化测试,坑点汇总!(建议收藏)
查看>>
Python + Appium 自动化操作微信入门(超详细)
查看>>
Python + Pytest 自动化框架的用例依赖实操
查看>>
Python + requests实现接口自动化测试!
查看>>
python + requests实现的接口自动化测试(超详细~)
查看>>
Python + selenium 如何截图?
查看>>
Python + Selenium 登录QQ邮箱
查看>>
Python + selenium如何做接口自动化测试?
查看>>
Python + selenium如何截图!
查看>>
Python + selenium自动化生成测试报告!
查看>>
Python - C 嵌入式分段错误
查看>>
Python - DM 一个用户 Discord 机器人
查看>>
python - Flask 基础 - 蓝图( Blueprint )(2)
查看>>