使用共享技术支持大量细粒度的对象
主要组成:
FlywieghtFactory-享元工厂,复制创建和管理享元对象
Flyweight-享元父类或接口
ConcreteFlyweight-具体享元对象
相关类:
using System;
using System.Collections.Generic;
namespace Flyweight
{
/// <summary>
/// 共享单车工厂(享元工厂)
/// </summary>
class SharedBikeFactory
{
private Dictionary<int, SharedBike> NumberAndBikes = new Dictionary<int, SharedBike>();
//获取单车数目
public int GetBikesCount()
{
return NumberAndBikes.Count;
}
//获取共享单车
public SharedBike GetSharedBike(int number)
{
//动态添加享元对象
if (!NumberAndBikes.ContainsKey(number))
{
NumberAndBikes.Add(number, new YellowSharedBike(number));
}
return NumberAndBikes[number];
}
}
/// <summary>
/// 共享单车(享元父类或接口)
/// </summary>
abstract class SharedBike
{
public abstract void Ride(int externalState);
}
/// <summary>
/// 小黄车(具体享元)
/// </summary>
class YellowSharedBike : SharedBike
{
//内部状态
private int InternalState;
public YellowSharedBike(int internalState)
{
InternalState = internalState;
}
//骑车
public override void Ride(int externalState)
{
Console.WriteLine("编号:{0}小黄车,为您服务{1}分钟", InternalState, externalState);
}
}
}
调用:
using System;
namespace Flyweight
{
class Program
{
static void Main(string[] args)
{
//共享单车工厂
SharedBikeFactory sharedBikeFactory = new SharedBikeFactory();
//获取单车9527
SharedBike sharedBike1 = sharedBikeFactory.GetSharedBike(9527);
sharedBike1.Ride(30);
//获取单车9528
SharedBike sharedBike2 = sharedBikeFactory.GetSharedBike(9528);
sharedBike2.Ride(20);
//获取单车9527(该单车就是之前那辆单车9527)
SharedBike sharedBike3 = sharedBikeFactory.GetSharedBike(9527);
sharedBike3.Ride(10);
Console.WriteLine("当前共有{0}辆共享单车", sharedBikeFactory.GetBikesCount());
Console.Read();
}
}
}
结果:
参考资料:《设计模式-可复用面对对象软件的基础》