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

你可能感兴趣的文章
Python Tkinter 笔记本小部件
查看>>
Python Tkinter 网格复选框
查看>>
Python TLS版本匹配
查看>>
python车牌精确定位
查看>>
python try except finally_Python3基础 try-except-finally 的简单示例
查看>>
Python Turtle图形窗口不显示任何内容
查看>>
Python tweepy写入到sqlite3 db
查看>>
Python TypeError:格式字符串的参数不足
查看>>
Python UI自动化测试Page Objects企业级实战
查看>>
Python趣味编程:用代码创造无限可能
查看>>
Python UI自动化测试三方库扩展详解
查看>>
python谷歌翻译,2021年9月10日亲测可用,一次可以翻译十万,强烈star
查看>>
Python UI自动化测试数据驱动实战
查看>>
Python UI自动化测试集成UnitTest
查看>>
Python UI自动化测试集成UnitTest
查看>>
python unicode-escape
查看>>
Python unittest mock:是否可以在测试时模拟方法默认参数的值?
查看>>
Python unittest单元测试框架 TestSuite测试套件
查看>>
PYTHON调离线语音合成并实时播放
查看>>
python unittest高级特性!
查看>>