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

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

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

什么是Flyweight模式?

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

舉例說明

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

1.GUI字處理軟件中每個文字都是對象,緩存這些對象公用。
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ù)量的對象
    /// </summary>
    /// <param name="count">指定的數(shù)量</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;
    }
  }

使用舉例

復(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)文章

最新評論

涪陵区| 东安县| 石首市| 昆山市| 南郑县| 正镶白旗| 阳江市| 勃利县| 延寿县| 巴林左旗| 化德县| 天津市| 临沂市| 玉门市| 巩义市| 布尔津县| 甘洛县| 湖州市| 新泰市| 洱源县| 锡林浩特市| 冕宁县| 定结县| 乌苏市| 麟游县| 新昌县| 孝感市| 桐庐县| 高安市| 玉林市| 广汉市| 沐川县| 叙永县| 廊坊市| 洪泽县| 东兰县| 湘乡市| 麦盖提县| 友谊县| 枣强县| 长丰县|