国产探花免费观看_亚洲丰满少妇自慰呻吟_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);
    }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 常熟市| 武邑县| 贡觉县| 东乡县| 留坝县| 新营市| 来宾市| 德庆县| 太白县| 静安区| 得荣县| 尖扎县| 玉田县| 林西县| 陕西省| 浮山县| 桃园市| 全州县| 连城县| 绥棱县| 托克逊县| 莎车县| 滕州市| 尖扎县| 汉川市| 寻甸| 桃园市| 东光县| 上饶县| 罗田县| 宜丰县| 黎平县| 通许县| 洛川县| 屏山县| 亳州市| 京山县| 华容县| 晴隆县| 鄂托克旗| 两当县|