最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Flyweight模式應(yīng)用實(shí)踐的相關(guān)介紹

 更新時(shí)間:2013年04月12日 17:40:45   作者:  
本篇文章,小編將為大家介紹Flyweight模式應(yīng)用實(shí)踐,有需要的朋友可以參考一下

什么是Flyweight模式?

享元模式(Flyweight Pattern)是一種軟件開發(fā)中的設(shè)計(jì)模式,其主要解決的問題是通過類對(duì)象的共享,來避免大量創(chuàng)建擁有相同內(nèi)容的對(duì)象的開銷??梢院?jiǎn)單理解用空間換取時(shí)間。

舉例說明

一般的設(shè)計(jì)模式解釋中都會(huì)用到如下兩種場(chǎng)景來解釋Flyweight Pattern:

1.GUI字處理軟件中每個(gè)文字都是對(duì)象,緩存這些對(duì)象公用。
2.字符串駐留技術(shù)(String Interning)。
具體實(shí)現(xiàn)

復(fù)制代碼 代碼如下:

/// <summary>
  /// 享元模式Flyweight的實(shí)現(xiàn)
  /// </summary>
  /// <typeparam name="T">Type of object.</typeparam>
  /// <example>
  /// // C# 中數(shù)組是引用類型
  /// 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的實(shí)現(xiàn)
    /// </summary>
    /// <param name="factoryMethod">分配緩存的方法</param>
    public FlyweightObjectPool(Func<T> factoryMethod)
    {
      _factoryMethod = factoryMethod;
    }

    /// <summary>
    /// 分配指定數(shù)量的對(duì)象
    /// </summary>
    /// <param name="count">指定的數(shù)量</param>
    public void Allocate(int count)
    {
      for (int i = 0; i < count; i++)
        _queue.Enqueue(_factoryMethod());
    }

    /// <summary>
    /// 緩存一個(gè)對(duì)象
    /// </summary>
    /// <param name="buffer">對(duì)象</param>
    public void Enqueue(T buffer)
    {
      _queue.Enqueue(buffer);
    }

    /// <summary>
    /// 獲取一個(gè)對(duì)象
    /// </summary>
    /// <returns>對(duì)象</returns>
    public T Dequeue()
    {
      T buffer;
      return !_queue.TryDequeue(out buffer) ? _factoryMethod() : buffer;
    }
  }

使用舉例

復(fù)制代碼 代碼如下:

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);
    }
  }

相關(guān)文章

最新評(píng)論

铜川市| 衡山县| 怀远县| 大冶市| 仲巴县| 安徽省| 丰都县| 闸北区| 民权县| 东源县| 赤城县| 宁河县| 富阳市| 乐昌市| 台东县| 额尔古纳市| 开原市| 华阴市| 文化| 淅川县| 西充县| 克东县| 湘潭市| 万州区| 宝鸡市| 南京市| 砚山县| 双桥区| 元朗区| 榆中县| 广东省| 丰都县| 富川| 工布江达县| 梓潼县| 东阿县| 晋江市| 金堂县| 绥德县| 邹城市| 台北市|