开发设计模式(六)多例模式(Multition Pattern)

多例模式实际上就是单例模式的扩充,多例模式又划分为有上限多例模式无上限多例模式两种,有上限多例模式中的多例类的实例是有上限的,当这个多例类中的上限数值上等于 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();
        }
    }
}
原文地址:https://www.cnblogs.com/martianzone/p/3364965.html