源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

关于Flyweight模式应用实践的相关介绍

  • 时间:2021-01-16 16:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:关于Flyweight模式应用实践的相关介绍
[b]什么是Flyweight模式?[/b] 享元模式(Flyweight Pattern)是一种软件开发中的设计模式,其主要解决的问题是通过类对象的共享,来避免大量创建拥有相同内容的对象的开销。可以简单理解用空间换取时间。 [b]举例说明[/b] 一般的设计模式解释中都会用到如下两种场景来解释Flyweight Pattern: 1.GUI字处理软件中每个文字都是对象,缓存这些对象公用。 2.字符串驻留技术(String Interning)。 具体实现
[u]复制代码[/u] 代码如下:
/// <summary>   /// 享元模式Flyweight的实现   /// </summary>   /// <typeparam name="T">Type of object.</typeparam>   /// <example>   /// // C# 中数组是引用类型   /// var pool = new FlyweightObjectPool byte[] (() => new byte[65535]);   /// pool.Allocate(1000);   /// var buffer= pool.Dequeue();   /// // .. do something here ..   /// pool.Enqueue(buffer);   /// </example>   public class FlyweightObjectPool<T> where T : class   {     private readonly Func<T> _factoryMethod;     private readonly ConcurrentQueue<T> _queue = new ConcurrentQueue<T>();     /// <summary>     /// 享元模式Flyweight的实现     /// </summary>     /// <param name="factoryMethod">分配缓存的方法</param>     public FlyweightObjectPool(Func<T> factoryMethod)     {       _factoryMethod = factoryMethod;     }     /// <summary>     /// 分配指定数量的对象     /// </summary>     /// <param name="count">指定的数量</param>     public void Allocate(int count)     {       for (int i = 0; i < count; i++)         _queue.Enqueue(_factoryMethod());     }     /// <summary>     /// 缓存一个对象     /// </summary>     /// <param name="buffer">对象</param>     public void Enqueue(T buffer)     {       _queue.Enqueue(buffer);     }     /// <summary>     /// 获取一个对象     /// </summary>     /// <returns>对象</returns>     public T Dequeue()     {       T buffer;       return !_queue.TryDequeue(out buffer) ? _factoryMethod() : buffer;     }   }
[b]使用举例[/b]
[u]复制代码[/u] 代码如下:
class Program   {     static void Main(string[] args)     {       var pool = new FlyweightObjectPool<byte[]>(() => new byte[65535]);       pool.Allocate(1000);       var buffer = pool.Dequeue();       // .. do something here ..       pool.Enqueue(buffer);     }   }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部