多例模式(Multiton Pattern) 实际上是单例模式的扩展。
多例模式(多例类)具有以下特点:
1、多例类可以有多个实例
2、多例类必须自己创建,管理自己的实例,并向外界提供自己的实例。
3、实例数目可以为有限个也可以没有上限。
代码如下:
public class MutitonPattern
{
#region 属性
/// <summary>
/// 名称
/// </summary>
public string Name
{
get;
set;
}
#endregion
private static int nMaxObjectNum = 3; // 对象数量
private static ArrayList _ListObjects = new ArrayList(nMaxObjectNum);
/// <summary>
/// 私有构造函数
/// </summary>
private MutitonPattern()
{
}
static MutitonPattern()
{
MutitonPattern pattern = null;
for (int i = 0; i < nMaxObjectNum; i++)
{
pattern = new MutitonPattern("MutitonPattern" + i.ToString());
_ListObjects.Add(pattern);
}
}
private MutitonPattern(string name)
{
this.Name = name;
}
/// <summary>
/// 获取随机的对象
/// </summary>
/// <returns></returns>
public static MutitonPattern GetRandomInstance()
{
int nIndex = new Random().Next(nMaxObjectNum-1);
return _ListObjects[nIndex] as MutitonPattern;
}
/// <summary>
/// 根据索引获取目标对象
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
public static MutitonPattern GetTargetInstance(int nIndex)
{
return _ListObjects[nIndex] as MutitonPattern;
}
}
class Program
{
static void Main(string[] args)
{
#region 多例模式
MutitonPattern curMutitonPattern = MutitonPattern.GetRandomInstance();
if (curMutitonPattern != null)
{
Console.WriteLine("当前对象名称是:" + curMutitonPattern.Name);
}
curMutitonPattern = MutitonPattern.GetTargetInstance(2);
if (curMutitonPattern != null)
{
Console.WriteLine("当前对象名称是:" + curMutitonPattern.Name);
}
return;
#endregion
}
}