a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > C# > 正文

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

2020-01-24 03:28:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

什么是Flyweight模式?

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

舉例說(shuō)明

一般的設(shè)計(jì)模式解釋中都會(huì)用到如下兩種場(chǎng)景來(lái)解釋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ù)組是引用類(lèi)型
  /// 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);
    }
  }

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产成人在线网站 | 色涩色 | 毛片免费观看 | 欧美日韩一区不卡 | 电家庭影院午夜 | 蜜桃免费视频 | 亚洲六月丁香色婷婷综合久久 | 国产精品视频在线观看 | 91免费在线看 | 精品视频在线观看 | 日本大片在线观看 | 国产精品欧美一区二区三区不卡 | 岛国伊人 | 国产精品久久久久久吹潮 | 欧美另类一区二区 | 在线日韩视频 | www黄| 蜜桃视频一区二区三区 | 国产精品资源在线 | 久久免费精品 | 国内在线一区 | www312aⅴ欧美在线看 | 日本亚洲精品成人欧美一区 | 亚洲精选一区 | 免费黄色毛片 | 久久精品一级 | 四虎最新入口 | 91久久看片 | 婷婷成人在线 | 91在线视频免费观看 | 97成人在线视频 | 久久不卡日韩美女 | 福利视频一区二区三区 | 国产精品免费在线 | www在线视频 | 国产精品国产精品国产专区不卡 | 成人一区二区三区 | 日本中文字幕一区 | 国产精品美女视频 | 欧美亚洲专区 | 中文字幕 国产 |