多例模式,顾名思义,就是能产生多个实例,这是它与单例模式的本质区别,今天要说的是个数有限的多例模式,即指定只能有限定个数的实例。Demo如下:
一个宗教类(Religion),一个测试类(Test).
宗教类(Religion):
package com.example.demo;
import java.util.ArrayList;
import java.util.Random;
public class Religion {
//定义可选宗教个数(这里只选用了基督教、佛教、伊斯兰教三大宗教)
private static int MaxNumOfReligion = 3;
//定义可选宗教列表
private static ArrayList <Religion> religionList = new ArrayList<Religion>(MaxNumOfReligion);
//定义宗教信息列表
private static ArrayList <String> religionInfoList = new ArrayList<String>(MaxNumOfReligion);
//定义当前选中宗教编号,该值小于MaxNumOfReligion
private static int currentNumOfReligion = 0;
/* 静态代码块,优先于各种方法执行,说白了就是第一个执行的方法,通常做一些初始化工作,在这里给宗教列表
和宗教信息列表赋值。*/
static {
for(int i=0;i<MaxNumOfReligion;i++){
religionList.add(new Religion("宗教"+i));
}
}
private Religion(){
}
private Religion(String param){
religionInfoList.add(param);
}
//随机获取实例,Random.nextInt(int a)随机返回大于等于0,小于a的值
public static Religion getInstance(){
Random random = new Random();
currentNumOfReligion = random.nextInt(MaxNumOfReligion);
return religionList.get(currentNumOfReligion);
}
//使用静态变量currentNumOfReligion
public void displayInfo(){
System.out.println(religionInfoList.get(currentNumOfReligion));
}
}
测试类(Test)
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int peopleCount = 10;
for(int i=0;i<peopleCount;i++){
Religion religion = Religion.getInstance();
System.out.print("第"+i+"个人信仰的是:");
religion.displayInfo();
}
}
}
打印结果:
第0个人信仰的是:宗教1
第1个人信仰的是:宗教0
第2个人信仰的是:宗教1
第3个人信仰的是:宗教1
第4个人信仰的是:宗教0
第5个人信仰的是:宗教2
第6个人信仰的是:宗教0
第7个人信仰的是:宗教0
第8个人信仰的是:宗教2
第9个人信仰的是:宗教2
上面讲的是随机获取多例模式中的某一个实例,如果要获取一个指定的实例该怎么做呢?比如说,一个虔诚的佛教徒,他的心中只信仰佛教,如何让他和所信仰的宗教联系在一起,而不是让他和基督教或是伊斯兰教产生联系。这个很简单,再写一个方法:getInstance(params);通过参数params是不是就可以实现这个要求了呢。很简单的,自己思考一下吧。