多例模式实际上就是单例模式的扩充,多例模式又划分为有上限多例模式和无上限多例模式两种,有上限多例模式中的多例类的实例是有上限的,当这个多例类中的上限数值上等于 1 时,此时,多例类退化回到了单例类;而对于无上限多例模式中的多例类,它的上限是没有限制的,也就是说它的上限数值是不确定的,
这个多例类并不一定能够退化成单例类;
多例模式特点:
1. 多例类可以有多个实例
2. 多例类必须自己创建自己的实例,并管理自己的实例,和向外界提供自己的实例。
先举一个例子,大家还记得那首诗《石灰吟》吗?作者是谁?于谦,他是被谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇帝,被俘虏后,他弟弟朱祁钰当上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,我Shit,在中国的历史上就这个时期是有2 个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。
先看类图:
using UnityEngine;
using System.Collections;
class Emperor
{
// 多例的个数 //
private static int maxNumOfEmperor1 = 2;
private static ArrayList emperorInfoList = new ArrayList(maxNumOfEmperor1);
private static ArrayList emperorList = new ArrayList(maxNumOfEmperor1);
// 当前皇帝的序号 //
private static int countNumOfEmperor = 0;
// 先把2个皇帝产生出来 //
static Emperor()
{
Debug.Log("............");
for(int i = 0; i < maxNumOfEmperor1; i ++)
{
emperorList.Add(new Emperor("皇帝" + (i+1)));
}
}
public Emperor(string info)
{
emperorInfoList.Add(info);
}
public static Emperor getInstance()
{
Debug.Log("GetInstance");
countNumOfEmperor = Random.Range(0, maxNumOfEmperor1);
return (Emperor)emperorList[countNumOfEmperor];
}
// 皇帝的信息 //
public static void EmperorInfo()
{
Debug.Log("........." + emperorInfoList[countNumOfEmperor]);
}
}
public class MultitionPattern : MonoBehaviour {
// Use this for initialization
void Start()
{
int ministerNum = 10;
for (int i = 0; i < ministerNum; i++)
{
Emperor emperor = Emperor.getInstance();
Debug.Log("第" + (i + 1) + "个大臣参拜的是:");
Emperor.EmperorInfo();
}
}
}