享元模式是一种结构型设计模式,其运用共享技术有效地支持大量细粒度的对象。要掌握共
享的概念,花很小的代价,实现资源复用。实际的应用中,如线程池等。
namespace Designmode.FlyWeight
{
/// <summary>
/// 共享充电宝抽象类
/// </summary>
public abstract class PortableBattery
{
/// <summary>
/// 充电宝的状态,0: 未被使用,1: 被使用
/// </summary>
protected int _state = 0;
/// <summary>
/// 某使用者使用充电宝
/// </summary>
/// <param name="userName"></param>
public abstract void Use(string userName);
/// <summary>
/// 归还充电宝
/// </summary>
public abstract void Back();
/// <summary>
/// 获取充电宝状态
/// </summary>
/// <returns>充电宝状态</returns>
public int GetState()
{
return this._state;
}
}
}
namespace Designmode.FlyWeight
{
/// <summary>
/// 充电宝的便携工厂
/// </summary>
public class PortableBatteryFactory
{
/// <summary>
/// 共享充电宝的集合
/// </summary>
private HashSet<PortableBattery> _portableBatteries = new HashSet<PortableBattery>() { new XiaoHuangPortableBattery(), new XiaoLvPortableBattery()};
/// <summary>
/// 获取充电宝
/// </summary>
/// <returns>返回充电宝</returns>
public PortableBattery GetPortableBattery()
{
foreach (var item in _portableBatteries)
{
if (item.GetState() == 0)
return item;
}
return null;
}
}
}
namespace Designmode.FlyWeight
{
/// <summary>
/// 小黄共享充电宝
/// </summary>
public class XiaoHuangPortableBattery : PortableBattery
{
/// <summary>
/// 归还充电宝
/// </summary>
public override void Back()
{
this._state = 0;
}
/// <summary>
/// 某用户使用充电宝
/// </summary>
/// <param name="userName">用户名称</param>
public override void Use(string userName)
{
this._state = 1;
Console.WriteLine($"{userName} use xiaohuang portable battery.");
}
}
}
namespace Designmode.FlyWeight
{
/// <summary>
/// 小绿共享充电宝
/// </summary>
public class XiaoLvPortableBattery : PortableBattery
{
/// <summary>
/// 归还充电宝
/// </summary>
public override void Back()
{
this._state = 0;
}
/// <summary>
/// 某用户使用充电宝
/// </summary>
/// <param name="userName">用户名称</param>
public override void Use(string userName)
{
this._state = 1;
Console.WriteLine($"{userName} use xiaolv portable battery.");
}
}
}