国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

關于Flyweight模式應用實踐的相關介紹

2020-01-24 03:28:46
字體:
來源:轉載
供稿:網友

什么是Flyweight模式?

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

舉例說明

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

1.GUI字處理軟件中每個文字都是對象,緩存這些對象公用。
2.字符串駐留技術(String Interning)。
具體實現

復制代碼 代碼如下:

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

使用舉例

復制代碼 代碼如下:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜昌市| 平江县| 遂川县| 临武县| 剑阁县| 太康县| 宝山区| 余姚市| 永仁县| 延长县| 东乌珠穆沁旗| 和龙市| 武安市| 灵寿县| 南汇区| 巫溪县| 鸡西市| 庄浪县| 灵宝市| 秦皇岛市| 旬阳县| 南康市| 中江县| 昆明市| 江孜县| 子长县| 花莲市| 密云县| 元江| 武定县| 遵义县| 牡丹江市| 高碑店市| 郁南县| 常熟市| 齐河县| 安义县| 湖北省| 秭归县| 拜泉县| 额济纳旗|