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

你可能感兴趣的文章
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
node-request模块
查看>>
Node.js 8 中的 util.promisify的详解
查看>>
Node.js 函数是什么样的?
查看>>
Node.js 历史
查看>>
Node.js 在个推的微服务实践:基于容器的一站式命令行工具链
查看>>
Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
查看>>
Node.js 异步模式浅析
查看>>
node.js 怎么新建一个站点端口
查看>>
Node.js 文件系统的各种用法和常见场景
查看>>
Node.js 的事件循环(Event Loop)详解
查看>>
node.js 简易聊天室
查看>>
Node.js 线程你理解的可能是错的
查看>>
Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
查看>>
node.js 配置首页打开页面
查看>>
node.js+react写的一个登录注册 demo测试
查看>>
Node.js中环境变量process.env详解
查看>>
Node.js之async_hooks
查看>>