此模式是单例模型的变形。
核心思想:
1,构造器私有化,外部不能随意new该对象;
2,对外提供获得改对象的方法。
3,使用一个类变量记录允许的最大的对象数量。
4,使用一个类变量记录当前对象的序号。
5,使用一个list记录所有产生的对象,每次使用时,都用这个List中取该对象。
源码如下:
package com.wayne;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 有限数量的多例模式
*/
public class Emperors {
//允许的最大对象数量
private static int maxNumsOfEmperors = 2;
private static List<String> nameList = new ArrayList<String>();
//作用类似对象池
private static List<Emperors> emperorsList = new ArrayList<Emperors>();
//当前对象数量
private static int currentNumOfEmperor = 0;
static{
for(int i = 0;i<maxNumsOfEmperors;i++){
emperorsList.add(new Emperors("第"+(i+1)+"皇帝"));
}
}
private Emperors(){
}
private Emperors(String name){
nameList.add(name);
}
public static Emperors getInstance(){
Random r = new Random();
currentNumOfEmperor = r.nextInt(maxNumsOfEmperors);
return emperorsList.get(currentNumOfEmperor);
}
public static void say(){
System.out.println(nameList.get(currentNumOfEmperor));
}
}