【发布时间】:2016-08-06 06:02:42
【问题描述】:
我正在尝试实现一个类似单例的类,它的生命周期是基于时间的。程序开始后每 5 秒创建的实例应该是相同的,就像在正常的单例中一样,并且在不同的 5 秒跨度之间应该有不同的单例实例。我想出的是一个存储单例实例的列表,而不是典型的静态实例字段。但是,当我测试它时,我仍然得到相同的实例。代码如下:
class Program
{
static void Main(string[] args)
{
TimedSingleton t1 = TimedSingleton.Instance();
Thread.Sleep(5500);
TimedSingleton t2 = TimedSingleton.Instance();
Console.WriteLine(t1 == t2);
Console.ReadKey();
}
}
class TimedSingleton
{
private static ArrayList _instancesArrayList = new ArrayList();
private static List<int> AddedPositions = new List<int>();
private static DateTime _startTime = DateTime.Now;
protected TimedSingleton()
{
}
public static TimedSingleton Instance()
{
int index = (int) DateTime.Now.Subtract(_startTime).TotalSeconds%5;
if (AddedPositions.Count == 0)
{
_instancesArrayList.Add(new TimedSingleton());
AddedPositions.Add(index);
return (TimedSingleton)_instancesArrayList[index];
}
if (AddedPositions.Contains(index))
{
return (TimedSingleton) _instancesArrayList[index];
}
AddedPositions.Add(index);
_instancesArrayList.Add(new TimedSingleton());
return (TimedSingleton) _instancesArrayList[index];
}
}
结果:true
如何修复它以在每 5 秒的时间跨度内返回单独的实例?
【问题讨论】: