欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

什么是Flyweight模式?

享元模式(Flyweight Pattern)是一種軟件開發(fā)中的設計模式,其主要解決的問題是通過類對象的共享,來避免大量創(chuàng)建擁有相同內容的對象的開銷??梢院唵卫斫庥每臻g換取時間。

舉例說明

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

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

復制代碼 代碼如下:

/// <summary>
  /// 享元模式Flyweight的實現(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的實現(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;
    }
  }

使用舉例

復制代碼 代碼如下:

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

相關文章

  • 經(jīng)典實例講解C#遞歸算法

    經(jīng)典實例講解C#遞歸算法

    這篇文章主要用實例講解C#遞歸算法的概念以及用法,文中代碼非常詳細,幫助大家更好的參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • C#語言中的修飾符匯總

    C#語言中的修飾符匯總

    本文主要介紹的是C#語言中的修飾符,主要從四方面介紹,希望對大家有幫助,一起來看。
    2015-10-10
  • C#套接字(Socket)通信之UDP組播詳解

    C#套接字(Socket)通信之UDP組播詳解

    單播 Unicast是指客戶端與服務器之間的點到點連接,組播和單播的差別是,必須得有一個“組”的概念,然后才能進行組播,本文就來和大家講講UDP組播的實現(xiàn)吧
    2023-05-05
  • C#中DateTime.Compare()比較時間大小

    C#中DateTime.Compare()比較時間大小

    本文主要介紹了C#中DateTime.Compare()比較時間大小,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • C#圓角窗體簡單實現(xiàn)方法

    C#圓角窗體簡單實現(xiàn)方法

    這篇文章主要介紹了C#圓角窗體簡單實現(xiàn)方法,涉及C#窗體設置的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 淺析C#?AsyncLocal如何在異步間進行數(shù)據(jù)流轉

    淺析C#?AsyncLocal如何在異步間進行數(shù)據(jù)流轉

    在異步編程中,處理異步操作之間的數(shù)據(jù)流轉是一個比較常用的操作,C#異步編程提供了一個強大的工具來解決這個問題,那就是AsyncLocal,下面我們就來看看AsyncLocal的原理和用法吧
    2023-08-08
  • DevExpress之ChartControl用法實例總結

    DevExpress之ChartControl用法實例總結

    這篇文章主要介紹了DevExpress之ChartControl用法實例總結,需要的朋友可以參考下
    2014-08-08
  • 經(jīng)典排序算法之冒泡排序(Bubble sort)代碼

    經(jīng)典排序算法之冒泡排序(Bubble sort)代碼

    這篇文章主要介紹了經(jīng)典排序算法之冒泡排序(Bubble sort)代碼的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • c#使用csredis操作redis的示例

    c#使用csredis操作redis的示例

    這篇文章主要介紹了c#使用csredis操作redis的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 基于WPF實現(xiàn)面包屑控件的示例代碼

    基于WPF實現(xiàn)面包屑控件的示例代碼

    這篇文章主要為大家詳細介紹了如何基于WPF實現(xiàn)簡單的面包屑控件,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-05-05

最新評論