手机
当前位置:查字典教程网 >编程开发 >C#教程 >关于Flyweight模式应用实践的相关介绍
关于Flyweight模式应用实践的相关介绍
摘要:什么是Flyweight模式?享元模式(FlyweightPattern)是一种软件开发中的设计模式,其主要解决的问题是通过类对象的共享,来...

什么是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);

}

}

【关于Flyweight模式应用实践的相关介绍】相关文章:

C#设计模式之外观模式介绍

c#设计模式 适配器模式详细介绍

c#中虚函数的相关使用方法

C#线程池用法详细介绍

深入DropDownList用法的一些学习总结分析

深入C#字符串和享元(Flyweight)模式的使用分析

关于C#.net winform程序验证moss的集成身份认证实例

C#定位txt指定行的方法小例子

.net的命名空间类库的简单介绍

C#可选参数的相关使用

精品推荐
分类导航